{"_id":"@react-ssr/core","_rev":"798-13fbb0cc655e25d1c4d7fab5f8857e8d","name":"@react-ssr/core","dist-tags":{"canary":"0.25.0-canary.2","latest":"0.24.0"},"versions":{"0.5.7-alpha.4":{"name":"@react-ssr/core","version":"0.5.7-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9d0fcda2b9e799d761b88629b0140ce9e8260577","_id":"@react-ssr/core@0.5.7-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-laB1QsP/nguZ2JQghkikpBEOOoQCaxsswLc9VkQ9D4CO+GMDa82zi79yrzCsWGQtUwwG+f6Hggb4lH44YU1feQ==","shasum":"77bafb60697ddd80079cd5e69366b04ea97604e0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.7-alpha.4.tgz","fileCount":22,"unpackedSize":22035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrPdCCRA9TVsSAnZWagAAa+gP/0jlo1OTkM5zXBBBqT0t\n6zRmLP/A7BmLUvVyEXbONOM28uIyb3jiI0D/8QrnWbWiCbNc5zmc5NpT9yRn\nz2XLQUxzjg7bISBxfZx1UP/de2jGN6Y+Sa1R7+psjf5khYnUuUh7T2NfToer\n270FyaDY1RrZ3NEvNUjsOwuGkqXlCbZcYmjz4ExbTAIz+WL527jKcAwqoem9\niaU6VdBGjp+59dS8SgaTVFkR8DoIk02NsRQI8f32+V0jU1nrGPwItWdpY4jc\nFAg25JISNEWwX2mlgUOfj9AJaPpSGpuAogXTFp33wcVz+Qqe4xdKkQphsxYY\njACdOGPAk1DutVpEyZKOFthbHWVr2L8zBLb4C4FE2zeJH26oID5b2nzuMUI4\nHwcruYcpISbDelOBcQP16midp1JWgTwygjQLJVcUwKenb/5b5HI7CUHz2Acq\nUTQO6a2oHNGItSe7pO7N/kr8CVHgpXVRigzWuEpoPmyYwWZeub5sVCGWVpOM\nEup7JXQDO2MttkYwvssrenqCq+AhkPpqhZF8+EQY6T8tf13NidpzWdVRk4xX\nQd5022COK/7e1t83UFDd2miR50NqNXCvE0Ve24MlgpUe7UlNhliHaZqCrMHu\n1HJltS4NCl6yvzMs8d64M66EbwbH/u//jUkIrIhkKOOp3has2R2OhZFjmK3N\nSeBe\r\n=CFts\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrvCHk4QxFp/qY8L10NwVD5RO97SFzLs2UgVycqUaoGgIhAN7y47yRTzMHKpM5O0g8NiP6IJfoFhBUzAiBgRr2DH35"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.7-alpha.4_1571616578109_0.9831687036554764"},"_hasShrinkwrap":false},"0.5.7":{"name":"@react-ssr/core","version":"0.5.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"29dba97c2a2c389e00ca467fa8e1f23e9de2b143","_id":"@react-ssr/core@0.5.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YkFbOMNx3r8RCyxMZpApFUf0v9nDH1NUQ1+1qxH1uawKHj9L50g4XgEaKOFdSi0aDAQvc39FpeHlk+cHJaJa5A==","shasum":"3ff08e96524af97ea4534214be30275b24c7a33d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.7.tgz","fileCount":22,"unpackedSize":22019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrPkfCRA9TVsSAnZWagAAAL0P/12JtQtZZbxn8EEsOm5M\nu1M96/YHYiNcSkczw7f0yMM/LP2q0FdV8LGI1tcPGbU0WAMIdZo+KK0pHf2k\nZKzYxN1hRUJZ5x3D/X+FD9V4S/PYQLjte5fz+IJRISnTTV62Ak8T0Ph8S2Gw\nHATwQ49KQeZu1D6h2oILyGy/E4QVBBqymk3bKrSkm4pEdLPp1PJ2EHa8KBBo\nx85tYOG3sOFLw9XtqJj/7+bs/aE94k6ZmJBwYGlgZuUKZicRglNneb3X8YQK\nNgJD/ryV+dP3ruTaiWqWR75v55xYkcyhRcuNhQayd5Qgalr+ridD1BvDV2nj\nKbLtfVd+dIS7ap+b678B9vm6+jAvOen2VH+hm7cktmugk96vgpO80INlRRiB\nJltBzm5P7kENx7Bm/T4Z8qCHkbOABcFo3UQWc1oqYfktHi0jInMR96omUVQf\nmu+A3zjPJ6BysWlRXrsrP2U4sYkjs+iGwbqrVA1kWXmQNqvVpFkrnOkGh48T\nbgeYZkPVMA5tFgOaEED2VzbYAPixFfMbntUSyuhiZ5hkc3n9Qd9tMc3dDH1z\nHnxTZnK8t0EQlkB7eKSWRpcYw2BrlqKLX74aceCtqNRNOwtoXL7QCd0oqI3R\n6/BLGSE8wqpOkmuVihAwrJOWNxOIoa+T/3pt8H1mJTu1Rh3cEhwHwcQD08X4\niPtg\r\n=3HF6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVv5tq601dTtOkitJTwkD0Bl8jEnPWbL6F+3hhLtkWmQIhAJM4GF0RC6Gmv4RmHwe6Md/OiNEvQRWl8KDGOt8RChcq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.7_1571617054656_0.5358138076526775"},"_hasShrinkwrap":false},"0.5.8-alpha.0":{"name":"@react-ssr/core","version":"0.5.8-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ec27d0726b2f01242774aacc644ea5347ad29d0f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used in [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.5.8-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9gWP2XfizLCDuJ8nJ+GoAyCTPvuRFRm9V40fCQL00cVnIrSB0qtAg5HzUGUX9Bkefo03vShF6Y1PR4sDiPpjeQ==","shasum":"8fcb9450908696927cb17a444bf548ce1984523b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.8-alpha.0.tgz","fileCount":22,"unpackedSize":22008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrPp0CRA9TVsSAnZWagAAm2MP/R1XQYSOG2y/6SHO5Ihi\nQss0Wx3Zph2i2WBqDcQ5gCi52xEITvw681XcSBkVeCImzOnAQ33n5ao25jnk\nlJw25Ej2LHeqGfnAXvrrjnUxfHoC+POaa/azs/wRjoTHTp7Dm2uW85ahqMeO\nWSVrf1tSVcMfhA8UqROr1OX5y0oyLMCtQq/21fOE5N5bnioZpqgvn0Znpzm+\nC2CUw0vSYtkZeB49yDaE1WCEyBurCPZFxTSwSqVKU38PYblyU9Bj88iuM7sp\nIkZO0VMzTYlEGsBl36nCKYZFzN30kHl04QzTgjRc1qsbx5pRIl+Ek8Df86qN\ndIP2BnndaIAoiYI+hhsvzPsc4urnYq2GHp3WmNrbuCAjq1v+JJQlz/VBUDJc\nXXHStqi/ua7g3tzAwZ1IRnKnahXqQoHPJThQbe2BGfLWBrJ05IHDdvgJgo8h\nmnwyPwAywhRDNlLpeWlr1YzHwm3nP+77J3TKqwi3e50ToOcn7bzWQ5OVlAB5\nYIAtBG9sLf5LcxEhs37vUy9WLAIKV8ji7MnJWx66Luln+3IGGXXR6yYTuBzW\n5c9w++Rscw5BF/DmwZKr1pKdu9mUxoXU5JTIHIDTiYNBjokbz5LPF0YTwX+3\nz9HPyftUC1ywAJcIbPn48tF0DJEXd11rmymaOP1sFQy6Sc1NNrqWxnWoFUHq\nq98m\r\n=jNPT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH+y/xCGVq+9azaSGiSRwSE/9m4KoFdWgJtA7eb25o+jAiEA4PEfFe6ML+/hBh7syUQsrKA8sdZEWiUb81zrAtERIRw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.8-alpha.0_1571617395546_0.593562755608515"},"_hasShrinkwrap":false},"0.5.8":{"name":"@react-ssr/core","version":"0.5.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4","webpack":"^4.41.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"285436ddc2b134ee8561d3a9716fc90de68ce885","_id":"@react-ssr/core@0.5.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-7+Mym4jJ2+V3HP07Aa9yw9XlhFYGkVPmMfxPpdVAan6f34OfIqZj+rsqrXUFVDC5R71A/OfTDvEep++XvZh14w==","shasum":"a90c302549c85cd311d7f7b771c38f193916ba78","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.8.tgz","fileCount":22,"unpackedSize":1717167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrQF6CRA9TVsSAnZWagAA/7oP/2YHr9MgOuhaZ+zn4N34\nqh7mJPViSAKrPUQOjutYZn0cbkKZA2fPXT7Obhk6iwR9bq5eJy4VD+CKfInv\nDvvcVbLsbwg4nxUXHYdYBmPn44EURGdQGRoysrfaM08Xsl/SzN15TRSCUWex\nmlodhvIgizL1FAskG/VvpnxFLXr8ndeCEq9d25ADng5RSkNAg0YrufBWW/Bq\napRH0idM3irKqaoFv6K1jJk/Z9799XnohGRnGaRWRYQ4/NFRSSRo79bQ0TLi\ntjHfVboXMYFY4DyFNn+8OGbBkOLdaKeEMY9Cif9y0hZXCw6KmfHBbzxM5r1L\nihqIL5upJLNds63KnePQOfhh4hkZ+HriNCXPf5X9FPMsNykbZUpsFwwfXPLw\nzbQlKwAju4kzbJraE+LyBbqz5EZTlwQBa3cOsMsfnqFxXD6/d4rgkhsW6EUZ\nxrI8M2KQ/mm5yOTw4WYo18qpUw9u3VRCIuvcvueX/i0HPmKGbTj0e1pkt5qw\nd1AK3dqRNAxGzpEf8V9d9DPTu+6oW8mpQijeN9HyyCtaRH/R4nhr1JmKpp5/\nFMh8Bdv0SnY+PcV4DpyLB7it52fUWhZOG+5oJte65UYetYrROMvUnGOVhqPD\nHy64JLNKCD8Jns9N7CDdZZ1i3LUKHwMpTvilIRqjSZVKN/8TmC174epyKrMp\nB/QL\r\n=jWbk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3+nbdeKGNA4EvgAHxjgG9rwi8nR2CP2ReloAjpN/ungIgMr8lHKeSHKBD5HanJkUtTfzVqTShquY1IU16MLoAsJU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.8_1571619193639_0.27997069010743947"},"_hasShrinkwrap":false},"0.5.9":{"name":"@react-ssr/core","version":"0.5.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c5dd8762944c9afb34e9c0883353fd54b7db2ffa","_id":"@react-ssr/core@0.5.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aGRD7+7F6A2+ICrPS/b4N5s43GsyLhin9MT6fKttT/2eB+5BZSC7RaN60VxL0egGBAHFdKtG050ljsomGGSeyQ==","shasum":"e26c589a5396e35847206f6f23a2db9cd480242a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.9.tgz","fileCount":22,"unpackedSize":22546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrQJnCRA9TVsSAnZWagAAJhMP/3jXGaKMTo+O3TUKZ9aE\nKx07hgI8M7MvQn1BoM8aDfOeAh7ODAgawjvJsenSVQnljioBgIjdwdadWNOj\nTZgTv1DBs7uLICPzBpx8UUA7D5m8xDn0j8eBMTFICuraLnpQ7x/R573NqMRk\n2itvw9YcJLZg7OsWRryAKkjNuiTJPxLnLzJiO8nuEG1Who4qXOb0wIWvOJ+s\nNLTw64Rwm05sGW1qd4dVgea/jyg3KVvXaNqZgugHlvGfjqJp9TjBXdQ97tDf\n931BYgZqS0l1bp5PIlxUvHYm916hxZoI0bRnUywcvwrDbVZWaThV8b2M+T44\nLHLkfLSD4CxO5nGABJEClSl0JztxVdIStMvWb/wjR7JQC/XgyFNqmNAFwxMA\n5n/eZQFLGAovBkwfKM4hNg62wzHIctQwSYdKU8uGPXC6MI5w7STGEBOeoxSy\n2pxZs32BUECN+Fc7SzXDNZzfm7orlasQPudQ9DKeAclDi/Bi+mDojpLMkJIu\n/zRv0ZR0DlE0KTam3j/u6UMcdl8U5z7ceD1gMmeRDAh25hmskFnuuzcFTwTq\n4U6UFzPq4yfznyvlRFjdw88W3nf4mcLAORGunV1m45x0K10wsq/O89jpL+HA\n4loiiaXa31nDaBZeeAlFDAYnAadfK67RBUSTY3r2JLQoscHI/R3U1gq1hxTm\n+e41\r\n=aMei\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7Y15eQL5R44xWnAdApEiCLvPRJ2Xkpbzk76XFqcdQOAiEAnTXnATFE4QV5J66t/H8QjEil84K4fymxawg8FS+gns8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.9_1571619431115_0.7730911976432899"},"_hasShrinkwrap":false},"0.5.10-alpha.3":{"name":"@react-ssr/core","version":"0.5.10-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b0996e57979fb5335e09f6f33821c51e8217d0c5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used in [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.5.10-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WHATuuk9OcJUDuZOxrqWjzXIIVMzJwa1vTMO8tpUNnf50TZxdZIgLQK9fJWXr4Eeuwv1K/92AgltcQZhC2pdbw==","shasum":"30c2323e63140c79ec0ea1e8e21a3f3be456b04b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.10-alpha.3.tgz","fileCount":22,"unpackedSize":19767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrQjSCRA9TVsSAnZWagAAxCQQAIKh08Jstn4TzHpNyW3f\nItxJT64fcWit5giRNEKa7sYDNqAAtUiQEV5X5F/bv4/76MDoEkHwVxvczcvK\n9vFDcdeS7RA1uPdt2oOAnLyc2SdF0ShV7T1dSx08UzqT8lRbk0LXyhr6wM6G\n8iGp4kLw6IvdtqRTpQ8DCb3/8dkUE1Uir+2x47ElO8OZjVxBQjBkhfSVfwf0\nO9sgQd4mskZiYWW3MPbVoi8ZDZU5nIejzjuYfAND4roeF3atXgEB3eUc+/MN\n/M2+adN3P+pvXiW88itPey85+cOJE6C65cMfx9XgkS+4PH2XxsPXmJxIKSmc\nT9f7KLIqZMm46K73s6Y4nij1sYTzrKxARK7SO7nUi6d4E1RWG8VCNAJz6PuD\nkU2Kfqp25hMbTh15VC6u+UPpwrGmYSQLXBxZFdRWmDxBjuOdJL5D0R20ZCh4\ncawnCw5jpktfDFLm1PDl6ALKP+A5+6dmJukLsaPr7UpkN3yeNNEtkTdsUwXv\na9RnwXAZB+afFd5IzaV6zhLNBmXibOq2lQDx006DUMDiYe5sWdReZHPZHGBC\ngFpof96W2rGD63UTQ8M6QxZs0DOL9iSeizReKiAJKDCWq8TVCmJOCOkZkmq5\nCqitjJSqGDx/mks4k+R8PiTIT/tBtPjbo0ycUSG6oOLL1N1BoxgVsl5z9mlH\n/6bb\r\n=cx9+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEXy5dCmy7PQAmiOvGa11roAwtwrirk9x0aAD1U2foYxAiA4BNSvvY0MrC3WqABpS96R/QNzyPM686aOM58/wMH5Bg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.10-alpha.3_1571621074287_0.5376440273604162"},"_hasShrinkwrap":false},"0.5.10":{"name":"@react-ssr/core","version":"0.5.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"386318d42206db3ca66894e3d3fb70cefcd88ba3","_id":"@react-ssr/core@0.5.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DelYOkdYCPYDa34Z8131s7r0Z1dPzYGndfvji9EKH4KfW0wvhLfUgPOgBJFyMYjEVEhqoxYHufvK+Bl1De4XqA==","shasum":"7282bc3de73458456e90a30295c17efb406848cf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.10.tgz","fileCount":22,"unpackedSize":19751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrQjzCRA9TVsSAnZWagAAQrsP/jL7NVFC61+OyUk+iXmT\nev/9GLOIH3LK6P+OAv9Cakj72hIKvV01btfIdGbYQB6rpkFo6CmQdeI8G/Yt\nh04C5QXdzlz1pWxRL/fjolIFwy106vfvxj5LLl5sdPRNQHr4v+iKeoqubM6G\nWVjw15H3WJlNWbk7ezQzpCAPMshJRPoBUYkklcpItGLhCKIi1TZFSpgIzWDO\nKy9pkgEPVqjg9LbyNkDj29Eg7+uR4/llyDAIF1sREh4OcJCyiGdlYsKPvknm\nMEEVfasmeXFfG7GDxFHiX2v2F1p3GXPuYdExZwF4jiSHj+Fidk+JZr9/Z4jC\nEk3Np7vIlZE2tHzXUsxLAa9fIqtnNAzH/XJxjyIX6Bl2B8/VR5c4EAD6YrZ3\n6CjgLbmPyShmHbcFGgx6E9n9PEQGsjXzqeLgcckK+y7p1NzqL6jTDSml3A8K\nc6oLQgvvMbphOlBseejuHEOyqANRbQVXcNtdF/XSCMeP+z5NvAg+gu4OUYpF\nbGZMZjDSDOBFcVddoKx8WCNNmpwtGn1IcLWKjAOjdE9+yF5HzClpZyonA+Cy\nm/znBZ2igCleMmNRQdwdD6hdYbObujf9zHdyXw37zKzHEmg3LIciFCQUsCqB\nmCdZxrtlPSN7U9YptzBj6IppMo7uMSgw+fh0ZmmclfiGie8ZKhYFsSBIHtLX\nL+4i\r\n=Lj9P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbBfP31RZ6Nswyu8q03yMd891z3VNsEKPkRWLxQa4a+AIgGNewCIx8ekn5Ye+7IfUvdXKUT3LGyS6x3jGedPs5ldo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.10_1571621107351_0.6358626475198046"},"_hasShrinkwrap":false},"0.5.11":{"name":"@react-ssr/core","version":"0.5.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1ea4ee9a66457213c8757a6bb3451c69cc593546","_id":"@react-ssr/core@0.5.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-kRmJGZpdk9/Gj261M6sH5EHWY0g3GYDMx6KWgZ8cw22iQH3ir9d8CyS50S67iUn+Ik7SIzsor8L5ftCA/CVrPg==","shasum":"497b3273748038ea1fab1d8aea6068bcb8235f0d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.11.tgz","fileCount":22,"unpackedSize":22567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrVuDCRA9TVsSAnZWagAAQPkP/0MzWEa1fh+/r1E90ZzT\np70xIbZrOUBKjczJlysWeH02hCPpsSjTCcVrJiinb6dHEo154xw+75yJmSP4\nwkidMWhMkuVlDGZI0Lh11boljN0qc7xqDczPLClgmmCg4hRKisgMCqg5S8Gr\nw//x8/bFCo32/GaiyoxFafgsaPsVdYY+eUREwRbMYoPgngcB7EE6APjiw+K2\nBhh3gOCdhUDiNIBK6S2McEtkcPKj/PeQnUT8dP5/E6kKBGFRcj34SyKfqrXg\nln7UrQ3IIC7vLrpfZnQm98zmf1f2EuaBzk8jDOT/+uy1VR0GKnPYgWS1rj9I\nTaPnAZUwg+Pq/m45/ZlNiXyg60zStidzw1khlf0e79iHGTQYoMUVNHzMmju3\nYWZx7DJzwHLtpkXvdPNNEv5xKnmQ+ZJfU9hlkoxe8bmSDl67mU24vKlLXaGF\nW5+jRLctqOhz9AepTj9II2b+dWK2c7Pw6NfmzuAOKbyJ8o2sNuBs1d8JLWjn\n0SfqlpfPZ1bqw7rt71qJvh4N/W1uH/8GlECgZ2SH2fcCsFIcLzP6DdP+TcQE\nT6O9fr1gudZVRiTaGQ87mr30+Ug3oEP285qyK5+Ynn75l1RLGJp0PqKAiCnL\nf8pQ5C0awS+cZQZfqrnbwnv1QtO8bI6/BKjXrY5wnE3lTQWEu4esm2sSgYxm\nd1uK\r\n=yVI8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3uINwWjduP48aNFqBDqYDP4Y9mtsp78KhJMU7xEcTGQIgarSMkZLhxYp5fST1mU5waopPKl1xRTRa9X5E2cYpHM8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.11_1571642242636_0.012979984678284984"},"_hasShrinkwrap":false},"0.5.12":{"name":"@react-ssr/core","version":"0.5.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a786ef1c7e5dbd3386f83e1967eee51d8535d1c8","_id":"@react-ssr/core@0.5.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-UH/6wRMs7fzoEgj8FfO3z/ko8nFHV4lNweCZzyRL37bilotw5yGnDF04F8zvzZDErWOtVRZ6pMj7z76cxCrJWg==","shasum":"b398f2e83bb043bc978ff722663c76c1373d0a16","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.12.tgz","fileCount":22,"unpackedSize":23005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrV85CRA9TVsSAnZWagAAPyEP/02oyTM4hMFpt6wdtuyE\n3mG7VVR59TcKCnrke9xLK/vMNEqyC4sIEJmTJD4WFitBSTZ6x9FzJmpd8+6o\nAHJR3+EI3abEkycIVa1gezkClyWxdvczTsYbDgY3E6XfYRJDn4V+XAt0820C\nwvSeeiBFqKcDRN/KQIOpdMi/Vh/tCjQFPUIE5gXvVZa6FQO0D4zrMWxqBBOW\nJrGF/4fP8xK9hWcqBIpfOJ6w/fiWhpJLFCarMlouftaN7SeAZWnER4sgRWd3\nQ/w+NM8sn8dULv4NS9ud1G60+i2MCIO+fWNKlzJXLZL3HKPGjGAfR+FlUPHW\nzTvXBvSvw22sKIIOT+NQ0CwCxhfnN6LMf8yM6FB8HQ9d/2w9rNQBrdKgMMl0\neMT725SL7qYknsgkSq/XdVJU7uz4zxDvP/1MF7rF27zYG6l0TTOXdmcjimUk\ngBkEM45T1sHjepJJGW3PjoQZo1bOj4YRjwErMkc++Etge0KfEpJW+8knMw2t\nZi9ZHmL2Ncyl1FHHceDOPLzH3fiff8JeRGWgOOCcw2QvpBYqNyc/2B8CM7fJ\nuPKhCfNgys9KvrFOJ0S9yFujEz/pRmuSj0GV4WSz43HB4z/It9aUzYxTrGQU\n6Y1Fb5+SuD/1HDrWZ7+K0Q03NUclwgHjSn+XSYkBR5Qhl3UN5kNeIgWO3FSR\ncoV6\r\n=p1Ez\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNGRd0nIcrCYBwVHCyggebs2BMpmhvI4DntWCjDcfaSQIgGlI+e0lFz7vzWDjmcREBIbW16DV16yTYsDgRtGShs2U="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.12_1571643192621_0.7532491337482183"},"_hasShrinkwrap":false},"0.5.13-alpha.0":{"name":"@react-ssr/core","version":"0.5.13-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","json-url":"^2.4.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.1.3","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/node":"^12.11.1","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.4","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.10.2","react-dom":"^16.10.2","rimraf":"^3.0.0","rollup":"^1.25.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7167d798a495726e7fc1f2a720cfff6e9a61752b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used in [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.5.13-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WyeAf61rzsa0k8V4A5xR8v7tezNlyEJdfYiB0jX+MSy0xTHkG9zKVqb+dHY/MRtu1PTKGjD+JRqA3HyRn3z1Lg==","shasum":"a1732ebd5106c0ec46fd39bcf907461d3650044b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.5.13-alpha.0.tgz","fileCount":22,"unpackedSize":23001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrV+PCRA9TVsSAnZWagAAdV0P/32Gx8iVzak4PHD2wN7s\nVkXkRYEWbvhlDAIGqr3BbxE5sCvQvl4u8E9M5szKxNCuA73GYJwDhFW25bH1\n8YlgXKuf3EmL07NKg5Jz8uwvIijp8XNqAqAfqSTOrX4C8T8IqP8Q29+nq0dz\nKkAwofB/P11MWKP88z+zE4NY+Trnj5VskXeJfU5fJ+clH93UeKJ4X+0TqvoH\npMjLeqiPl+j+Eng0U6FwAPd/BVZDka3le4yIt8St+42tUR1ogiFmwI6NOXMV\nBsxhWUBmEe241Qsy+QVV0oOrcuVJ+1kyxNRQ+SnoRM0Ks5KRBN4BegPm8E6W\n24Ya/92JD4W3GOR49UWhxOa9JQCEJ8r2q4wpog9RWnXLsY6XoW0dGHoHBXxs\n8UUuSQvRwE465X5XY2O4x5r0O0H/q7ESCl6qEurQ4Clx90LBxbNiH7eV/bJy\nRPnozxg3xvBCFZFets5FvMLhVXLvR3TwEgZegPd67QemV0IyUGkWD/U+NFWN\n9KKuSaJyOYfKvUzePLiltCjMyMr0SU7uffyQSuvdhUDiAv86A0JCmD9RYQJL\nWUlGoGQScVmGNk4Lw+BDByrKUoGg37lC0yQ4000o8/8Vj0ClPuQGkE2C6FWE\npshcwjWlNeVjIkCPMb9EYQuw0af3ANl8QXK1/KCLi0XaS1S/v/6vpawgs+OB\nO7py\r\n=fiCd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB8TWByTzlDY9sWX8D+JrlpNVgEXY4MOq3H0KnFZhPiQIgWYASaPdEFDg9eukJVc0BbkuSvrKGO9+9nWJL7pTP9lw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.5.13-alpha.0_1571643278950_0.8294982633203534"},"_hasShrinkwrap":false},"0.6.0":{"name":"@react-ssr/core","version":"0.6.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"dist/index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9147bdec06aa388f2fc37026db7b562275132ff2","_id":"@react-ssr/core@0.6.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-M+Dpk7pDNYOFUoOKSGllKpjzcJSebCx4YOa2utbK5HKiNexgKKlS7SZh5PJKHSuinoM+TWtv+xpFpxE8oseM/w==","shasum":"910eb29592923c837bd948a9734ceca7d47b4eb6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.0.tgz","fileCount":10,"unpackedSize":23731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsUTyCRA9TVsSAnZWagAAFPIP/iEMsM8ymMSexXJ2T9DK\nLoZFLV33IcONcxQyCu6WY3PBAu2GevmzPHCzeHBcWVF0nQtfX94FfdB/RSyc\nhNQtbCrbsul6lIMCMWIORtG0+cs6Dh7EfB32jEsb2AVCWLOYv+pDoxayYfCC\nBThTW1Riqm1pfawYOv7KpI6vOdloUpOYaya4t9N3XZIl13UdGgCIMuMRQyWs\nJ4mwR8nXa9lNWMwVuV2VM/IgB/Ne0Lsold+ceeo+AcMLYt7vCfFmZKjQZcXj\nWqalniAnn9vZJb2Cv7YN43EaXIvZrSSTJTGfZwoHisdYYXnLSw9V16BmkxJp\nhaRB0X1pgzhiWFVQj5zY3RbJlb09RhOOVT2KyRWaJLGTk339V59SOdsPukpT\nMYz3o1wlc1/ybv6ksAJDN/f/4Qqn6N1iSwI+6euhHuWwPsq8srP/+3zApyBm\nQh37z+rCBAybhRKnoHIG0zPFCFuV0X+AQ2rbRkeTy5SNRdh3LxAnbeE42YTy\nTtKbIP+P5PP8Y1h7BHF02+Ks0TA6b61BDY2XoF8tpzfiCEg8DzKrcWdTndFK\ns50hSrXJbzWdqBl2Q3W0MCYXGo1LRPsj/2/5q2K7G5WjnxAAwWpBQIwlpdsi\nYvKpOiGeOM6bxh/R70wboegHjs7Ji661XZudUBccY4OaVKzrjj5/7ewuwmwU\n9j/Q\r\n=bgMG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZCVRfs6jTEUx60r175WSvp/uQ84+VhIPOte9WA1sK7wIhANZhHM2L1eCAM50u8j5BBfaQzL8cBplK0E0vgo3Hg7E9"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.0_1571898610290_0.7102055377290806"},"_hasShrinkwrap":false},"0.6.1":{"name":"@react-ssr/core","version":"0.6.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c9da0ec0d9e3e63e41d1d5edcf7b39fb8d9ce1bb","_id":"@react-ssr/core@0.6.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NBmuhhbpf/m3C41x2YQnEdbOFbYxbLMOPnYfuTdElOy1hICOdB2mpLnb5GkGtrNfieH2VYoMR18cEzH0WiDTzQ==","shasum":"fde6fb90ce2b95a892d688883a4e574478ce2e50","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.1.tgz","fileCount":19,"unpackedSize":36921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsUdBCRA9TVsSAnZWagAAEMoP/0DFrdBoXpDBmRlH/mi9\nD89hF8OaGXQebBVG76BbaFkiKDP1MfnehvuFScdqkp10ojlFFSgMP+9BRIRj\nVmTap2efqxb3dwJ/2e375sNptVAC3DgYyvuuv7IYu1aVY/H2g00d88J2d4jR\nXj+SXgUbtIs3lKIsJlQ3hB96p3gYCBG46Gjk7DL1TRgLZWD/Czelxnax4tDx\nCYTcX18w3skf8bJ92vr0wKWE18QMOFWWv2jEEfwUoBZ+UJBRhabYbiiF6MhD\nmAd8Wd5e9JLBPktaYKrXJ0y/V17eag/9Tb8lW26G8MeohCEAzA1O+Viz1ljy\nwQaR3S4Fj/cnsf4A3ROmRxN+naDdIuN4oSrp4WBTtuGU/akq34ZSo5haD9md\nTjIVRx6fOq5uDOokh/JYqYclxbNX+ZhQ38YKuhIqQLyup/sarznOV0W9wLgc\nSjN5MRLr6hULvyilp1sB3GVtNidOhLPXhRgqxP1L8DYuCeojo+SfoWDV5oTs\nWRI3ONfpSB1JTGanqHdH8g38QEYx/L7ul30QE4pUcrqxAkTONV3rVm+zFij2\n/Gf08SktFf+bJoghZIC/g+nuIdOTly3yPi5hgsT6Yzn0sVqWYYoRGJ+Ig0cU\nZkrNuWMLuq7GW1F2PSNQotTNHt+i+5sUSU+bgAIwNV8usmGPfu3wbO4J8niq\ndedG\r\n=kghP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4nVeHS3Lp5CIdE7JhyMMFovob386f4Ju3cKA+OXVWVAIgH0s0Bj5RfgLTV1MgqMUrUvf/vNzAE9bQ+qNPhsBdIdE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.1_1571899200934_0.7636572505339736"},"_hasShrinkwrap":false},"0.6.2-alpha.6":{"name":"@react-ssr/core","version":"0.6.2-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"bdbad0bac0b50fda15c656c3fb585b33defc67a8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\nEach example uses `@react-ssr/{express|nestjs-express}@canary` by default, so it may have some bugs.\n\nTo use the stable version, please rewrite to `@react-ssr/{express|nestjs-express}@latest`:\n\n```json\n{\n  \"dependencies\": {\n    \"@react-ssr/express\": \"latest\"\n  }\n}\n```\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Usage\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nimport React from 'react';\n\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-starter](https://github.com/saltyshiomix/react-ssr-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.6.2-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IR9xC3hh2x8rPndsENFjZsg8o6o3kEIFOMJoDstVvWLxeud+tIiMgir5IGTx97Bp+IYhirdUk2iXGezO+fLPsA==","shasum":"4514bd682383a58c871c0af11f067ac696791f4a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.2-alpha.6.tgz","fileCount":19,"unpackedSize":36935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsawWCRA9TVsSAnZWagAAUMUP/RY+w5j1ji/z4e8yWlas\nhJMWxHi+3RV+BqYesXhQFW8e6dQYaoHcCCXc91pJ5ieqOkK/sOQSINBqV/Ye\nThkIS1vgnwStXG3cZckm86CtVagvTKaqjwsBQKSes16OPs7xILhwim2mgH7q\nMMIiv7kJ/NHx2c234th8asAOiuyQ0kJLZI0eNotex3rs4sDDFDiaSFgr6+Mp\nWIadvVpLJnNjQnZkqohj7qRv/xnfsNgnqGqdsjxm/XyXdehl2ifpVFkbTH+6\n7Kn7tVkdreOPP5UAV6VZMGgi+zxakkz9KpyBTx9TCz9/vhcFKnSxmPvzh0S6\nZSg24fdPu/zO4Eou/JfHYJpNCMzqEhiWABL5gbN5p9uSlCsNJHW2YMDEFOu6\nt9gvy2UJVH/9ApArYNbsscWWVt/cerl6Sm/eQHRv4tvyHD2ZY1udnN4vhiRN\neh1oqODV8Ci6L/t7/+NvtvbzPTit+hwQJxU+N7byp0AXd45gbHjOGsQp6Ocf\nhVCdH8UVskKisGW6FKmIBKhdBhvajDeSQaKhOQgN6uz48EML7PfYPZvf+iC9\nDjKzgGnR5lxq7Z739x/piHk58EYUNCsoaSSuCbbSGUIzZzCoi/3MYnfjaOY1\nWpvJbHc1Mw5dJbHge4m8HpYD8hXtXQfnO17ZYXEcidjlqRNjHQ0rNCeYsnmo\nC6oV\r\n=/8lc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8epgKjOJjzpN+3cq2RDuzpOF9YkTqmkIL/xS6rjv0IgIgeass09dekZNbAmxPo/Z31rYqcoofA8PrfW51MiJnExE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.2-alpha.6_1571925013785_0.6278453656937018"},"_hasShrinkwrap":false},"0.6.2":{"name":"@react-ssr/core","version":"0.6.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"655bfe55a76a51545fd3217f5e061d44828df12c","_id":"@react-ssr/core@0.6.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LYpFRRkXwxmX9G0OUojba41RzE06ozAey1jjsV7hP3kQG13lxj/idGrplhwz4Xhw0VHeS6p+RHJncBEUdGkupA==","shasum":"cd5e7192e753271f2dbc5edbea285b242e8d21d8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.2.tgz","fileCount":19,"unpackedSize":37040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsbGrCRA9TVsSAnZWagAAqZkP/13V+8u22JDzRz4+Na/K\nxGGppvqrE932b6/13bJfqTvT3CGIhc+eyukKP7n1mpYKE1LWUNuB01T6sXuI\nBc64hspOMCNIJGfN9AA2Bf7NXz2ke8RFKi6wIoycC/oWIyuGd48EtF3EvBEc\n8q16dGw19AnQw2PflyM59yFJuVz6BSVWOlRAN/0omxLh7X9kX3zTyDt37sYR\nLxY1emjdAOSuR60Sp4vzC41/xayvHlGqUyAR/PBHC6yZIAg6axUkirErrGYI\naF5NpLmkSYa0PD1yrpns97iEUg2R4oXD9ogLlmUfpLbzt/9YryTyw8ff2+JX\nRwW94N7WEpc/zsfwnCiKLgldS/R3Yki4KjmFvpxsQgS6EolhwAK/adzSVC27\nbHVFw2ZO5sSVra/8D5G7mllluCahi7uXazmjf6cdTqJ2K9rJD0ZU1ya4yle4\nVOQrfV12PBPwiJ6Qi9hSBxtEhIBp6M0TXpGkK9VBt9s0izPieSCTV6m+jRJh\n4nv3Doos+TZmPXdSNlfY4Z4Tz+/jO5r8rePTPMB6Pc05tbHI15QBgqaIa2vY\n2XJUQIV8W/ueSUqW6SkZiQBhHsCBn6tiBLLLct09uu/B6/fM7+2sejh7hb8O\n46T0yu/W6OpPlslthycik4fcveDCPXQByOczvZthW8ic8rnck3E8TXJ8yIK1\nnyZS\r\n=lDwF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNt6PQF+rAtixb73i9AshTLLHAFke0YEEICq91I5cneAiAaUeV2bPtjNm5vVc/rA9bVgAjtvNHyHLFUWBpYxnddJA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.2_1571926442767_0.011079761323287585"},"_hasShrinkwrap":false},"0.6.3-alpha.0":{"name":"@react-ssr/core","version":"0.6.3-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b4ab71364f2afdd83bb140b5703d84976457f8e9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\nEach example uses `@react-ssr/{express|nestjs-express}@canary` by default, so it may have some bugs.\n\nTo use the stable version, please rewrite to `@react-ssr/{express|nestjs-express}@latest`:\n\n```json\n{\n  \"dependencies\": {\n    \"@react-ssr/express\": \"latest\"\n  }\n}\n```\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.6.3-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-yWsm8ezTcQTwSQ5aBhDOFVBW7Y56e/m2lCtQhhF7qpHrGatoifh/UcAAlM307S7Mevpkj/Emx0wnAmZSjQI9hw==","shasum":"fbc8bacc36a581cfa353e4890f38b616f2987505","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.3-alpha.0.tgz","fileCount":19,"unpackedSize":36251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsbbDCRA9TVsSAnZWagAAOD8P/0MbHgDw/eWeL8SLFPsn\nGlO+PBixRSv1udeIEhBc48Ku9r8q6XkytDzwQgb+xn0S8AFbJee267Fmns03\nrV4IHpvaVgFvqvs5YW6n8uzUi4g2V3us8tBooRHiAQbQK9Jz3uI1eKTd0by9\nhP2AEV9r2knbtghKgGNkiPYcVsD8baRsVO7kEdOSpH6lJxva4I9BisXgwyAL\nlBgE5Sku4E2Omqu08FyUASW08i5cD19pSDr2OtIYNZUsX/D67bYLI1EXiUBE\nxFQiulL1Q+VUOCv5ustXK9ambFm5lKA8F9FLEAzxUTh1hFQO9z4kTa6/AdWc\n4s5XQdNpokhqAAig3sWF3NSAqmh6Wox6kmSwNEJ/nw0vblce91rKdRSTxDbo\nEHF6y9b/+1CMw/286Ap4ZzhI5fycEg3Iulq/m1BXqTB+mJmmsir0xwZacXxN\nCQXwUGGvSSpVcwSsgOdjdIE8vvPJVR2Wqijmz0QH09fVOEXK9pfjawhxKNeO\nf140jSgJsC5UX6R+bbzOkXxUktpwaAuIVV+d+UBBwrZUFJubtdE8Lh4Esixf\neBqfy4DHomUkpp8LbGviPMifTYgG1WODE7AnzwrWmlbAwvobodjDhxU143kN\noDoT5CENetCOFmjMpGsLK0eRPoMvp2UE9v0hy2fZqT7+GPq8dRfbLXXDMUh+\nRvBb\r\n=VbRB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUN+C93z/3YT/QVWbfUyC+6D1NlmlOaNg2l5AUeuOYkQIgRWsZUFD6O8rxj91wX3aATKoxLdjh+t5dCLgPukcE+3E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.3-alpha.0_1571927746875_0.9593055782742306"},"_hasShrinkwrap":false},"0.6.3":{"name":"@react-ssr/core","version":"0.6.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"39203bc813afde6c2eea4a747fe68f4f4f573898","_id":"@react-ssr/core@0.6.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-iumkt7EzcvfRWM672Ow24QeaUYbyBOX5TvWInNcZrnxSv8b9USSgF52lMpbWitg6cqRY6OvtMDNnD05ZMdytgw==","shasum":"fa9a5b59a12587f7313f8121dfb80e9d67ca8e8a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.3.tgz","fileCount":19,"unpackedSize":36235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsbw+CRA9TVsSAnZWagAAnngP/AqjFf5wXHfLIRm72+nD\nZ5gAQ+jQpVmZJOONeu9MMD6UmLugsP8sg5K2cGWimUeRk1Ujozn4s6Vqrt5b\nCHwHTI/7ucAvtvZvMTPXPMJ5uUx9AzvJh/8DbH8ZzbSMJM+M5rEubbG4o9Uv\nk67NzpeM9B0BK2i8q230j75k5mJToDWKsO7mD0bbYhqZ0t/9D+nNUW171K1n\nwL6ucdWr8Ydo6vUPl5Zs9QrygDGaAhARpTPtlgP5OD+m85iq6l/DyQtbFBdq\n6DWXk0RiDYfL6255hee7j2npDxupFz46Ok3gfhBcZq1Uw/r7gaizIRUJGdNL\n9TbgMsgVYV3wXi1fXVp3CYQEcSUGFFRppblEO3jrVN7/bK9nb0atDguE70MX\nk4UeW1SbtGawzI7iXzb4fcykQeejL12Vd3OQ1TDVDhaKSjAnncgGV+YpjpiE\nIXykKkjGqdoZcvc1UNU2aHrgeIHI7aokuJWZ78SmZs6u7aw8iZA+DtExSjcB\nsTccgJgIxdymxDPKvqElXTZy5NMd/raFrjoyzylVpPQdZcL/rNuAmA2wRkG7\nw1dniwQoO0DhEn0rdskpOqB2zmBFXMD9w7O3lO9f3q4NvYoF8PiEoC7KTZG/\n1O4fIy4U5ig8Za4ADqJcsp9nCNilV7an5weNFiSqPrtLlrAmLXLDqdhQH/Y+\nHWkH\r\n=SNVH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBs9vzxxGW3stQLwQmeQG+b5UsPhtiPObvqkRJaKW81AIgYqiEWFlF6lrFD+bf/R2lHTW2cYsWuNT94wuMA2Xjipg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.3_1571929149958_0.9350703866194707"},"_hasShrinkwrap":false},"0.6.4-alpha.1":{"name":"@react-ssr/core","version":"0.6.4-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5c658e4b4b3b55432498064d449eed1c34c2cf04","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\nEach example uses `@react-ssr/{express|nestjs-express}@canary` by default, so it may have some bugs.\n\nTo use the stable version, please rewrite to `@react-ssr/{express|nestjs-express}@latest`:\n\n```json\n{\n  \"dependencies\": {\n    \"@react-ssr/express\": \"latest\"\n  }\n}\n```\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.6.4-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3Q9FfKOwagoMqg2qWAv5+v7PsU9/vAgqZ/+V1frDa6dFnc/i68Zel9ibx/UBsYEJrrmyA3UyM8vlRbpw1G5QCg==","shasum":"027af1676b098988b88bb03d6f1d3258aaea99e6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.4-alpha.1.tgz","fileCount":19,"unpackedSize":36000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsfNhCRA9TVsSAnZWagAA6gwP/jyUH7i6RJRgbYfjy7PA\n36Uy3BqAZW6PgEolC3zZoDYV1HWo9J/d2/mwGGZTOTsOi4G/qiuDBL45Lmlh\n3ruYY7JduVeJdNg8qJUgjgnPlr2M25hprPU0ivXXLEKc3zGfgCEd/ucl+Xe1\nPx6xk41MQhtlgTNj70b0T4koER//uCIqXW0vco1XRdPItk8DAlyUtEnC3Eil\nUwqrPM/aIVOMT48JVtwgkb834CYn3Vxy5WEyi2PvTeiGrZOCn+ieMBXoIEs3\nQ0VqZsZqLA/jCTT3MyxGNCGN1qspbuuB1dE7sJBfr87RjLYvvkXxn9JwLcch\n3TaUiLuwbIco2Jofaac4OVpPOn6i8DXPEXX60j029BIwO4nuakJ2zJRdpy5M\n6RQJY70NGhE1xN/eIVGilfO7uMHT9e58yNAOB8NrPkQnPOUgblNV++2/2gZz\nth9FEO2P1jymuyUR085dkv/Fq7pBDjFqGhfXt6co4Fz+jefO9jM+QoIN3/85\nO9ndpsDiKY/2fOuq0qfG8N9Z/fmf6yD4VAN2wQ/IIVI6enrDJHMw75tzhFxf\nUlcuGDY9tB2xkYNHiA8bg9Euu8S+K9slR0dmvR5Pn5qY6Jc/Rxcc/oCniCLD\nfnRPonmRgtBWi6IjVzx2IJYCAorTggEAonw38aUV0GRRNbNcMDdMCrHvNUv6\nY4Uo\r\n=GnlB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUf06obPiMP73ODIlAtGFPNtisNiDYmTsm1YL6PEaGYwIhAInOJ668EVDOVywwkKHORxlNhe5zy0YqpjxROhqeDgd9"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.4-alpha.1_1571943265251_0.5031045386268722"},"_hasShrinkwrap":false},"0.6.4":{"name":"@react-ssr/core","version":"0.6.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f81986110f5294125b0e12849fcaaeb6006cf028","_id":"@react-ssr/core@0.6.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-W+SnllMyyj2Q28BaYjNVu3up3i7Ms7YCg0a8XN1jkVZJhmk/6hBj9CtI0Q1/9APlGZh9gWSkxzxNFrInzOnGEw==","shasum":"a104efacbc07d8def02d3b9517e90121df0055c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.4.tgz","fileCount":19,"unpackedSize":35984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsfOTCRA9TVsSAnZWagAA4dEP+gIZLkqOK5fZ+fa4iEv9\nEM863PmrMMvqCsAAYlPMY/mKPFtGILhh+bBCsFETz0vUN1hChI1+yxTFQh9p\nuJODlFw+DElzXvvDz0g008n49jkFInnDTZlzQ4QiE+qm9MOwr6sSDx3ybL09\npAjEFSMAUYD3hZuaOK0iF2HUN2cfE+vWkohhnN3MeequT/ySBanIN71dXPUY\n+nJrPwR88abjP4OCIqsXLDn8bcwErQ6o5m28mIOJnahUVtJP07Glg2mxWUca\nOzQERHit7gOgiJEpbz315wEDzqWj0b8cYsB2X5yvPHO72Xw4CJHyX1Z/oJ/8\ntEUIZz1zDGuI1BuPJjnUJEpTRimJXdJNQ33bhNbvyX5nXW7DvS1/1bni3PGe\nXssEshIw6NoqDSp3INYuB0ccMml7fyxCs+Rj/jVaqSdgu0cA4Biov60qh33a\n6aje8xfllwFiiobv+NSUa30kZZuMVsJ0eGF2210tEw3EPm8ZoyObHO0c40nC\nU0lK6iN0v6c7fTVB9euR2vZLfLK4hEnTHfQIWziscF4k3LYmEGfYZWIKDTL2\nzhyTmAAd7gnErz6GrzpqIHuFezVHim9YxUGfnaDw+U5DLuH4pd0q7Ty3Ul2C\nQhcrlMxgV3Hyn14SgqoWHKFWhS0HGD5YORuFWm2VyOsqrIa4yNgm+U6K6KgQ\nrM11\r\n=GOaJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJcSa9vNOGqXvh2IVaiW6/Spt1idoFsYBv3ly+LsfwzAiEA6IGFP2Qyndg/K42VwxHA/cK4sqBcj/9dzMptvlprFME="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.4_1571943315475_0.6443005670662951"},"_hasShrinkwrap":false},"0.6.5":{"name":"@react-ssr/core","version":"0.6.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"80db8c2237e90181a646a98b2315cf8d355286dc","_id":"@react-ssr/core@0.6.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Zq2VNi1aSZyHNWsgddzy7RlKkaTPplrd+CrjvceAsW0/Zq0K7GzRaGKrzEBpBJMeQTdmDym1vMY+JVHuMbNVZg==","shasum":"fff3253f80f7c019328cf8cf7eb033ee0db786c3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.6.5.tgz","fileCount":19,"unpackedSize":36235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsfTlCRA9TVsSAnZWagAAuFwQAKSMwW07IXrFz4T9MAyi\n6Ci3Mz8RPMGiO3QWUivUQhUjjnFhFZi3Yz9PNS63Qg9wzANAYnTQ2LhKnFE1\nKBxFbc3dCH+DNtdB4R54N85U5pZ6b2mA5WtJOSvPgqRpeVOxaMeg+Gc2UIzw\nnzNYqjYO5w7pNCOflBMxa1IH3N8v1BXr3QUscmRvRJ3j5KbygtEcpxlVInGF\n4u2VWtXqcVWUS8Govi9GbF1le2f6lFqET+/cDb9Xl+y9qX/mw8ri5Fy8kIPV\nvsghlJUYDMVPM2i3Cps3h64iKj45jwbWevxqFHkfRnsXTY7X/MNbcc7l+dw7\nPKb4Xi0qKkkeoWax01dybYBqllgJf5gli0JOobetwYBg3s0TyRNt7fH7iGGG\nG7L+IEWylXcGeGrI3jmRTVgc6Qufh5tax1BkkuxbK2RJf19ntu8b0CkGyMhB\nGuOuE9WebIhPphJDAG6CKxRfrAsnajoDXRisWvfBl5cRCzDob1R0KCJ+Np0E\ncOgKLT/ra1XJMbjfHYjdnIf+2djASPmAAy+I9Pz8+VoN4kurrHdoG+UaXjEd\no+7VUS4P7agi5Cxlc3rtcDCSFGEZA92TxLk2kGojuYwTAIByNqXB9VIcqjpU\nm4ApQZPgG3KLZp1qBB6707jMz1PfpNAUtcW+Dl/e7MaDfW0yuCKF0AL17SPw\nt3U+\r\n=e4F0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1JlKXE6ZpcAiMdZy7kyfBLBLiKBx4poRW0rW+yASipAIgFxpww2xRy5St/xu0pSsS8pks+Ni//GGkj31OZOcEiLw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.6.5_1571943652866_0.6753793259056078"},"_hasShrinkwrap":false},"0.7.0":{"name":"@react-ssr/core","version":"0.7.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"68d86b4c3680c06cf7b3eabd9a0e0ced6ad719d5","_id":"@react-ssr/core@0.7.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qoYfPQNz8qHZst5bwtqDVs2y/pOVRMbLxcBQ4Uc6bSlxqT00fEIH+kjg9dyJeAWZTBPe6vjGfR8ba+AL58jxZA==","shasum":"226e685964ee04f9476616cda3dcdfe04e1ddfda","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.0.tgz","fileCount":18,"unpackedSize":36342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJds6CtCRA9TVsSAnZWagAATxQQAJYxdxSdKRcFDp+tYkgj\nybonymJG/YmM1KeQ/A4e2rh6UomJSifiM+hxgmc0sbii2QfEmQmWineL9z6K\naA57KE0hR0+9xa3J8DqVyxYlJE2QAfDdqQqyD74szpS7j827YIcaElS+nuRi\nMp9ZJ/TD3jrRtPkWhNOG8tTHKra6GV1kNYDjpYWk4NSOeprHTV7WZioZPilA\nmywchz9BDtwxIN/qz5aMIap2ZwhyTPSrAXytcGZbfFcoL61CTBDS997JiCZN\n6J/2yuAGdC/TNRQ6tfSY1qyq2GghHxagqdzRgLG6dSfMN0IF0rswCzDY77iv\nwwOyEswrIVKAU58ubOfM682M364OzxBNmuuZZ8g9K/TRu+Ap9np+e+xhtADs\nxjkiMFB3PqzrFXb0O9ZOfzUS6pTCl2Bmr3Cw0ADi+NoTfvTC26hxVAVKCnLC\ntOlYBZ6kq0a8+oy7b+dshyOmWlIUlPBP5tYbki/nyeZ87fsH+uXWNYIfrr2L\n6rfrUwRpFRpLFzP3/iAaFF0ABByoG+PQrhulWnozyRlMm5qYD8V9+Uad+4mz\nzY21rv9QU1lBujYumGH/xFpnvhtKbuuhhN9JehVyo9Sn2/xEsrKUI1Yl7s0L\nhNuyZllWc8l1GBjU/qA9nXcZtNrZMHBoKse6mNuw3KDfL7tCgombW/6y2khI\n6uMR\r\n=U2GZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAd9ojJPvQtRVdfQIcigRWGdBMVo8TpE1cJ0oNp9CdayAiEAmvC5FXAy9lm6S3z4p0G9F/DiNtrwKGmqVQJDq9RRQkY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.0_1572053165079_0.7822414941855065"},"_hasShrinkwrap":false},"0.7.1":{"name":"@react-ssr/core","version":"0.7.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9cb3bd66e9e0b2159ad34edecc72f4cf1bc43cdd","_id":"@react-ssr/core@0.7.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9keY1k5K8P4yZCVlluhSZGBNPM0ddL9pDigRhnx5/jCWyUM0x3EWqMBaKVlqM8DGneGSnxu9bBlOFz0qPxvq2g==","shasum":"3ceeb692ec0eb873159a96c654f7b50e8473add2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.1.tgz","fileCount":21,"unpackedSize":37160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtBKOCRA9TVsSAnZWagAAJvIP/0WZ79xXkPS6OMwKH8GZ\nWcyN9HNV5MyUYBAIa3OlAUyfyfZzuyjM4DLqUv2TakFe9thiTfohu5Jy5Hn7\nuHeaB/YqDVsKauGHksNawNpjL/1dmoq0eMeALRFKOfW3Vb1+BYoVA3p0gAVq\nqLrVeUB4alnucArIN3RFZwENHsCgn4cG2ejWtqYjSDdPDiU5kOXpJ0mCJRQX\nq4eVbMajpD5eE/PXBEuXQH8dgjg6+WFruw0UwlTN0cY7diKrnIycRK2gZI0l\nfJz6gKFPOUyFxYqK+V8inq3qR2Qq7yFgwLkc6AbMSbhh74X1eWck3iql0XJd\nOEmh2nzOoSYL7pKFk2LrTzLHyRUpjO0cfG7JSjvyBbz3aOa/JSo8vuhDKsBa\nMPml9Qels9PAPh4+6O++o3taLnWifHSG7WAR2ZMUlMXsa6H3wsjgUmPYpSwW\nx3mfzM/h23/Tb9VYVTh5povPDXHq1tWi4dvEfPmSHS++JT8ydRxHFDwk6eeM\nGEFgGjHqXzHcaPgPoeedGsXQ4TgDzZfQoT2ycVlY842IeR7gqtXG7awslJjl\nnR1wNlTzwFJSLqxwYdAmI73k1llcXMxN/oadKaf68zqLbKFgXgKQSqmizAb9\nU9Ow30NYdxSqxjduqNFyJa0eq5W2Xb2aM+hP6qlR4ROkHJ6ycRnWi5fyjxdP\nOCcx\r\n=noNH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdjeOTGf/7SsSXhxnE26zUSqCsZ01D3PmhCHTwN7bX4QIhAOTOJcBE0offD3+E+/ZRB3l625mSR+yHFSxoaOKDJ/+1"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.1_1572082317664_0.757599329377256"},"_hasShrinkwrap":false},"0.7.2":{"name":"@react-ssr/core","version":"0.7.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a91a227cc2d15c4b958622da247f40c181093b12","_id":"@react-ssr/core@0.7.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ezJ/7Ym03X4nl1v5CeVvLveDxROqZl5CC/RtwBvGwnScNOSSiluqYXRylRbqytVSS3m5MYIiVRmondvDKvRtjA==","shasum":"6d1071fd51a05fe3cb75905abe7c075a8f255415","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.2.tgz","fileCount":25,"unpackedSize":45371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdto7bCRA9TVsSAnZWagAAxeIP/jilWgu8FdRs05T3a1sU\n80N2u46hHG2wJU4B5lpoJHOQFUd+UmvKQIvrpx480SAKj9qfGDh8AzfgrA9/\nKaFuPiCEAgs51jHWQcF2UeC4FeV+Qy4ngRhlXsIzA7otA5wmb7+v/GjwoQP9\nfhyHKgwEhyK5XsC5Ytw2Hb7CvGCMBfCyhhq5W2cTH99kpz6WfxVxuoyRAFw9\nmRtOrYjB4/rYJ23YxK6pUEc7zfOgRQZCDDbI+URitk3GEuUgXUWO3lzMuVYA\nhGN37fwVelmF/GFesUViWw9+eNSjMsukt/WyjcdK10WYJ33ycx1AjrLgiAoY\nIitoSxG+Ac6RI0I4+1jD4rqErd3556VKNbJ55dU4k0nLibMfAg3OefePaxEy\nSY5Xm/0mdMZhVBMT0FfI4zY5bRnizEXUEfEcvCQH4T3SvL08Xeni/ln9v8J9\nnGIxaW1ZkZlBhQi6vRYodizzFwMsxVlEGh+wiYB6SgxX9BI3F5PYSIZeWN0A\n4R/olvqKewHSQXXjN8lhn+v6h3I4rH9WovbioWZpG0DLPHSd6eMjr7Gm11dZ\nSIdLCqJyVXdTcqnQGMY1gpDaQSm7JIVmmA0sGl5+TwRB5aIAefxhx6egfR93\n04r+bBybgoo2su+E4x9RvGYg7hDqpihvccih0iRyvivrYlJF9CM6UV9uCyTu\nHfbG\r\n=gkf4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcOw5301r48f1Jnq31viCYOLBtS6bn5N1cRkuTD1Or+wIgDKQRyyT6sbX909rh2htxG4JjXHnlkqQcISSoo+M9pMw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.2_1572245210763_0.34044738225961346"},"_hasShrinkwrap":false},"0.7.3":{"name":"@react-ssr/core","version":"0.7.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a3ae27701c0a295893848ac5979159033832bb5b","_id":"@react-ssr/core@0.7.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Aw8MijlDrFWZ7Dqd9wIK3Ei4zpoDYn4IE62YXiwmod/zkllogkqZcyCeT9g1Hykr0rCyj/clcNdfKwEyAuMVBg==","shasum":"af04c9afeb1113b8f256997e5d24aed956dd7728","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.3.tgz","fileCount":25,"unpackedSize":45375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtpEsCRA9TVsSAnZWagAAsAAP/1RFYGYUi1Tk0ULs0Hg3\nw9qWIC6n1B7XPyoExnqd06Ut4/B/Ca5z/u9KNAvf/BPAQnpAtsgpJIhnQHqC\nW8dl1kKBcxjmJ+p3yRz9kaUo3MqOlSfCsh0wgECJg0Wsdggk1Ft+NTz4hCT2\nm30y9Pj5mg3oeN7WjcX0ooOoReoSqe3GyY/UK1Ekv2u1aYrwQAElT3wM7uNh\nOWf8OJTr2kPqLCQK0qWFoocph62u5LNZMXvGRiJn6TlrR1WLrRLSPangXAPS\nEzGwyq2bwcZRhPXPj4adPTLZwrwkFQydZ+lWvsS2cnkdx5vd7WBN5ZgkSeP5\nvOPAt+1CR6ygOB5yuCzKg40CV/MnN+4xqy1qMX7ZFq6oudqwh+4m7eHdb9Al\nTLyEbAlNBNDnafWCj8xYbgSX1W1p1etFLqx9b2i+C6BMOpyryJIxY4QYN9KN\nchHsEGneO0N9CToe2wI7Q97zHbtHMZbmZ0kZ+XEm/Pq05eDUZhWPhETpNeEM\n6gYL3LjzT2lglwUbLfYd1jHXwN4dlaE7/t2DGLQULs2vFDxMyjf739rsYHZ3\nD4y0qEozq/5jVWu/dwcf8WeXRlQURlhdEWtGy6JSQ5KytlYOn4024TDQyCNp\n2K3TbhidJd/uSL7buX76+Ree3wsgrMMn4wqfN1O9wpWPF086PtsgM5wPcOxI\nO1IM\r\n=xSwP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCufYmYTgWA7dgMat/B7YZCrPvl2wJd609nZ4NG3YBP3gIhANK/X0WLDpBM2vWiLLvAQhreOgkJZKwf3qcT3PNHVhBk"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.3_1572245804178_0.7019921824918995"},"_hasShrinkwrap":false},"0.7.4":{"name":"@react-ssr/core","version":"0.7.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fafb79ca95814bf4b63aee571817380bf1aafd61","_id":"@react-ssr/core@0.7.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-t1Yc0NoWmC333L590CLwRJffzcH1rhcQHl19/CDgCIWsQk4P+534wDPt944dUkAytvHILEu+6VpZg0Rt92xesg==","shasum":"90d1383acc8583b4ef7610f8c1ab167be82ddc7e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.4.tgz","fileCount":24,"unpackedSize":43534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtpJiCRA9TVsSAnZWagAAcLoP/jF7ATNTCslUUk8B33kw\nIww+DGEOmH/sfIHlIrO+fyHXOzxsKltzhq1caO/LzSFfel3PROqV+D/RdcK5\nrSFLUGo/RvxtPDjGVLiSOZG0edPp3goKIyLLCEVr73R7ZHVyicrG2omLymFf\nZQpMCSz7kQ8O71u/cGvJpaRgW9i8FSkDu2fVvqK80UeMHQhW61TdxUtR4Cpa\n0n3D2gAATievX9ffZlhFNwqS6KB0XLBGcoTvz4d9wMs+oOfwNFxYWdvRjjxX\nMD0fqMR4/xn1T6KmH6L6fW7kIMCX0h9CLkku3ydaJjEJQ6kBlwGr9Y6AHzi9\nFWBEOTCY+e+pv8OR4e4a5Ymh2wtzduyClFd3Af/0RVdsUcZdTsN0gJYp/8GC\nCH0N5cBJWZwfWLh2H7ICcvDk4Z2Osy2JaNkOjkzCX26ERD2hsATaygM95Hip\nfAKygT60FhMsG7wEpCQ//WbBi7T5FyRPGadqIYvjjZapg1allp9tD2/PBruT\n0Yj7E0vLMgIO8EfywVhOaYMvIqUV38SPEwdGUSpQr+HrEK+utRDI8xfqaycT\n5a02G7KbY9r0MbsnLfQOaFHU0p8Gaa2WTitW2LpOcFgDGPcZT2rsERtygM2a\nq/vHtC90OKbU86ZBIaFCvjU7yY34hCV7XX/FY5c9ksZUsvQw7te/12W++kVk\nAUnl\r\n=MseM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwW/5VacHAN/dYTb4Ea3MuGfJxfQX3zSTSZCo5xR6yYgIgW/jY4f9vfDM2eAbCXNXBwAC1+T2YYwQIR22HQReXAcc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.4_1572246114199_0.7185399824194367"},"_hasShrinkwrap":false},"0.7.5":{"name":"@react-ssr/core","version":"0.7.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d5c008441737361d2883355a32c178ed6168dd98","_id":"@react-ssr/core@0.7.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Z8bJpYBkR4ZJ+7yjHxr2ryE9BIuDcLkw9Xt1v3Nfi4JXkKOKZuFrlzHJ7qsJGsNR1cAZFPv2HrlHD2pDjEMaaw==","shasum":"01a2be21af581d6011ed8497b83d8f7519c3eb6e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.5.tgz","fileCount":24,"unpackedSize":44941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtpMfCRA9TVsSAnZWagAA3/gP/RFXttzkgg8zuMqodtxT\nYxpCR/RBNlX/lRRyZ8WDsPnYSHk1E1aKBFP+VidvN9NJ2IMhdDNORSFqna3t\n5BgjU3rZHVNKPaNmbmEzdlMvkS0xjBkLD8iCiH2CUob8PvW8T9l8ceXa2Itq\nkITgvBxLFWP/YqjeTQB50XD8QQoGssedsvXN2OhexTgLb676+pHTzBxWMXjO\nUuUVNUES/p2y1ZC/01e5hCZb+sggCd+IQPW+HsZdzwubMxBYoeq7AFuEBnIm\n9oy17SWo20/dWavu1enqEpgUN9bd1mHiPTGTfeT1CdNsm+q/McauCtDs9dwj\nsV6Xrcwwv50Fkuw3lLnU3kbVzwAoEEHePEx3X3pd+RI9GYYXugNWKs9AqLy6\no566a5zhoBo5144CKiKdBs6YsuBzFsFiGk1x+ATe6u3T8VM7V3wj5YNW9TUP\nLAjAO8kjMaSNGknpWSHzaeFKPxluqh9L0IBDGX/6YyV8qL96tFLtTzDfVPvC\nzJ9xSAVRKThnC+wmKdfoOWQQ/R/wHnliRjyhByh3XXT4volFZOBZ0Mfx3cFk\neazZuEL3/Hq1Uv8S3A7TiD6teS1TUCKYMRYGqOfxRePHCAQQgqdi/XUaGvYR\nO/HYAAeuFR9HGR3AMnYFy5HRchbKcgRJ3LvHurKhG6XgBlm2TNfE68yP7OSb\n436O\r\n=xlDJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnoSisKcgceOFIR6kkyDE6VIa0qW1O+8N5+vj2JhjekAIhANCdnkOX8ZeKJ82moD5RTG2coc4I/3I27PyFsmA9QfVm"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.5_1572246302679_0.5716383189817964"},"_hasShrinkwrap":false},"0.7.6":{"name":"@react-ssr/core","version":"0.7.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d2354011255ff06d1dfa193aca9002ee3bb6ab66","_id":"@react-ssr/core@0.7.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-1pcf8LTITGCpfflhZG7uDnYnlYJ9wBdKmfBSVFBltQ86FNkNpJ/HtXkjjY6joixtXCW8lYWv+PD0QdD1xywZcQ==","shasum":"511650d00125ecece3a0932bbdccfb30b9cdc33b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.6.tgz","fileCount":24,"unpackedSize":44854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdttd5CRA9TVsSAnZWagAAWjwP/AlSnTdIDaZSwc2wnBw4\nsk0tQigJJCWr0fx2EquESnF07QquRyAWU+wpPH3JCSdk3ZjtFfzX3Lqms7hI\nlTmWDKA8r2rLOQD5BG/b7LCj/qG811Xvj5k944RNQTctcI1ll4/rw6W5J1KA\n+BumR2CeyL9xoT7X+OlsVpi4PwlyKFfQCagkK4aE7h3fPHfUIPhM+hFjsKch\nbpeTugR+rSIXq8PMWczLB3Jb2JTlcWI0laLABK9cu9xH08GF6CtIrDd7g2y0\ngxh+Ef1TPu095y1YzGLUUT8fOSofrSSBxgqfHieixWvVnfp+1NCSHTLCD+vC\nlJP7Esgpfno2knneyvRJNeEMJVqP9Rfetm2EYeWwmf+7hUE90lBfXDM56n+5\nc/UFZD8zVa2a2gbRt9cDzc2ePcjdIs/fX/rJVPAvuKrKTdkxOQXyLfOlUIgk\n5N3PtThhGf1QQdFIg0LTzr1IAsMwf3kdTNc9TzN6HVQw4ZYiOUnt/FioOlh+\nJBZpJRcD6NzfWkbziiG7nV2NN6eUjoDakOzMOscUw6VX8tCK0C/gUiCNFDgA\n+LSyGOlBqnK8Y5KVCpQVfktnyx/H8oTQ35HK31bO40Q/nzOMbIwhJrv9A1gj\nXoGv/jHF2afV6ghHDHCnJnTCdLHjMYj15b2D9ZQPYPvMd/8dVuvi/kTTYt+8\nnfWY\r\n=zAX3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRK/IpMGQozEbpH6OvlYtYXtrUycwErKMuS2tyZet1cgIhAKG0R1PGPUD/BUCTT/ukvriWKxmy/oJ+odvGTkTVUHHU"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.6_1572263801426_0.7972465705029264"},"_hasShrinkwrap":false},"0.7.7":{"name":"@react-ssr/core","version":"0.7.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c672f9781cd21b0bebeeacf9d333102ef15afbe5","_id":"@react-ssr/core@0.7.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9sBuqfM9TgwNuumY9IRb8HuhKY4SbAc7lDdcxoXk1beLmFF+4MQ9U/NMb0HdKWauGkMjsPmu3CveN86JE+kRpQ==","shasum":"78ac191c83b7e7bc70fc993276918ab4c4e5b08e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.7.tgz","fileCount":24,"unpackedSize":45265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdttwfCRA9TVsSAnZWagAAJUMQAJMUXrhalBfQG92k83nS\n05WcrR3EqjMaWGU5PDHoknOI394MjI8IYVtQE34+w+Y9UH7e2NeB2oHbu5Wo\nDid12fWWAQcgAmGoWZ5F0prPgYubWnyPrwlI8ROrEAOU0c4dUd527aTGOvKY\nQ9d4nAB+1MPRhLGkWl2HigrS676bv9Eo44Lu4xbpn2GFcPSgkGIyk0D0W+b/\nhglPVFQywp2pMBHAwrNgX//RoISny7VT345czSK3bwy4qqmXTxxWsVsS05iH\nO8yFYXGZxj3wJtSHI0OvzW2+lzHPBK6ytDQd+Qa952FGhHuIR3B9EqtvHBX8\nv0Pmctl6O+XQK9wLg+uotL7PUC10F9V1t9Wv9KiIM5z2n4odHwi4jhNkc5uJ\nJTVB/gzInhX6cBs8Pykj9it32Ztti0BKXoc8bdkLVNJ+jpI0jEAYN7Vue2yQ\npM9YYAq+enU913auVQVTUC7cOEtMz8NsRKSMpgjOZBVfR7hPuc14crXEWT7k\nwX+LULyrOcuYELDVoZU6hLwgDoVJ70uK3ezRJeZkY2XCAsjKzNh3Zey4Quy9\nq3QjvFkApJzDz3DS4dJlLGS1IgAnGyAfFTfMkd1cyEF6PNdirGz0JbN3OFAd\nyeydrQV6EhAqwG59d47VBlywHdDMMLUXKnIZVQIjUuWpwgcl2Bi4BYN8KdTa\nYS0J\r\n=5rtp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHzJnoVpG8y+Ilp99+cuvncAPdqE6eccp6aUDh0ooso8CICATY2b8cRv1xslENLWA851Lt9azxRZKqANXMMJTwgzt"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.7_1572264991536_0.5432064005852137"},"_hasShrinkwrap":false},"0.7.8":{"name":"@react-ssr/core","version":"0.7.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1aff0b170c5c1befa790ef057d42c901d62a59e0","_id":"@react-ssr/core@0.7.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-wmAMWgjVt3f5lilBG1LMWMMTSThFtvZPa5hqvsGUO+u2RBDTaNAF/7W/0X0qViT86kYpkmaplUMAeI+vhVDrOA==","shasum":"71e76d81fe1f18ec9324cf13207512273d92a12c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.8.tgz","fileCount":24,"unpackedSize":45324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtt8qCRA9TVsSAnZWagAAjKgQAJ6Ns8jN+zcXxl7tuLkY\n6L32CARUbUO1qDk19JrcBo5ghBmLktkS5wTtOARz4rI8pRJ/NwAdzjjconur\n9/sXWnSSgL/RlWbLjJ4ZEH4G7HAp4pw68bYtU6MO1p0tV1sBtnuEMVHwWsA9\nZz/9hhQy3g4KXdqlSYJA/z0FwsqPesMombRbBksgQkFb2A0t7YOAPTfvH9eX\n28EPME0tfT1qNQcpByaZ8EwefoP7Ao3p+2s+7Rp4dm7j5NE40nfRMaOPBTFu\neNfrMC39ZZ8H2ezvow6ltdRtpiU2zhnWcpUgR1NXT8y9BaEbrmc5Qb+OZOnT\nhVOkZCVSq1YYUkxuNOA8Bb+DXzwKyLUg0GCxvYBOIkwsDvVwoSc+uQ9rJ4a3\n2cnskdhmaVcMqPuTbM17vBYXn9X4OT6tFe69L7U3eCahcccMUqRBgVjBDur+\nW0Rq5AXVNDjUOCNmvzzL6IOSoX9y20AsYSU1MRdRF1ayqAsEjH3GzxtV+DKd\nnUSHwWHB1idtexSghnHSRhfdX0GT3NfntGqx5qWnnF8qep+BAEvK0+9cSzDf\nkrt04Aa1CyizDQtYJYUlkdsZdlezNheO3eFjz/v6eMXXE9ywVB6tYK1vnhjs\nFzP45vQzPiowqQ/FlN5QXM70//0jKkLgWXb6ldQ7KwI3Un9LyrvBDxGUWckR\nMhwP\r\n=rLUY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzAdQNpwzFwndbkGsCJ5uJy40ia9IeCFNx9M36tjKtOAiA6lMQ6hhj51VgZ6+mPpb8XwzU2uZZs1lQihwPvQ4zCyA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.8_1572265769967_0.9176645785729993"},"_hasShrinkwrap":false},"0.7.9":{"name":"@react-ssr/core","version":"0.7.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c54bafb34f38db0aef279212a85b40b2d9c3d0a1","_id":"@react-ssr/core@0.7.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+jfg8k4ckS26ylno/Too0Y4KVA5zMfk3b58I+0UkBWStFDSfGti81JEakA+9VFybQDCeRC/8a/IcRVAv/cuy2Q==","shasum":"42ff3885ff3a140c63232b3d64fab5400fc1a9d7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.9.tgz","fileCount":24,"unpackedSize":45353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtuIpCRA9TVsSAnZWagAA3SYP/2DYh+J2Awy2UmSuTgCA\n0B6ZPXMMJt3xzZvYt4yPH7piaeJ9IurrDG/NxLOq+dA/BuB/QmpuSbjLxwip\nkJRvpTW/50urdZ0QL6bAHZRy1I/1auGNQGzz0VemsaD0SidSckNTSTtGe368\nsK2nYL8otAYjuPgpJ18qxtUg983CYGmswdwARXzFShFqbbPVm4yYSRXlryDG\nTsMKhL7jWmlmN3ED+qfD6/HvSZjDU2Wwj0+ULcuRGrz8kxdBVlCkiRfTlihB\nUE0NwlaPoeD96kPVLI3iq3O3GtZmewRHw/Tv3lk9yfj41smecDIT7FXPKPhH\ne3BiNEykiyMmvn3FnK9HColhqZkkaXBHIS02q71ykSEsuuXGDuPStToXaqmL\n85vx2eRP9P6OEFnb7ZqviVBFjSlEO1AJfkG9x8hSshi9tu4vv7c9O11NLPV2\nISMlXCScYdWxhZBwEhGiGUBGoBKV1oOLeIh57pi+OIElytSaX6CnqxHsoNCs\nynb5Aae6ZTZGudyK4U1mPquClMMU02d+BpO6Dx+rgsEA+QzXODsuq2rYNChH\nPFZuHm8w9zeWwwPEmEmz7EzEY6o9egxTOPkCJCuqB7VqOVMHBCNvZeIcRtwz\ns7/QPOo07rl5Pg+6f/GOTj9LMunwon5MOy+6ibngkJ1UZOw/2hmOV8SslGrZ\nBN/5\r\n=x5QN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrPJ8NeAN7ya/wvICLI5D8ILDL8z0eyLGkN2l150zR1wIhAPXdKw38XNjwKvqdC2wgYg99J5y/dwBwM6NtZEdoJyOX"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.9_1572266536731_0.9000536532762664"},"_hasShrinkwrap":false},"0.7.10":{"name":"@react-ssr/core","version":"0.7.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c9356bdb7962715baec2e9edc28fb22d80dcb34e","_id":"@react-ssr/core@0.7.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-apniPx9V7Doib6QZruur9kAC3LB2guL0NiaKyEWibFCstWFcZCuxoxH6er/7GuOBzvOnj9UCP0oANrmXY2C1pw==","shasum":"a67a8a97ab937aa49b26846f3a3411abb82f36e7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.10.tgz","fileCount":22,"unpackedSize":50168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtuScCRA9TVsSAnZWagAAcgEP/2HwtfmO7PX5A09EKxkj\n7SP/potPqEp1O4J3+A2ynvf/TWdNAWFkabkn8GuKDSmKak0nx1oC0sw88KxZ\nIk47FASsWINym92aLBipb+RsmOd+jQKTnVQuwj+ZNXDt3ENNSG3vwePNV8G2\njeT9c9ld7T41Hxf6+2ZyDVXR4W6tH+IOqPueiODSsAakEalAzlvMQPZsgpCx\nCmSoSSlCqcaT2sYX5GaxZDkAEjWT4G9yvCL6eMKmFFbrRYeVxF1Yz5F3poUt\npL+jcK27GV3S173RDV13zjmHpYuY2CRF5LrRRWNmnW+mPC0pczgDBx46AjqM\ndemiclhifmNR6TYVQGgQ978pTLmkaCv39FrftdUOmOK9eiFOE4r8kMILexSD\nSNb0TONxuZmsMJCWUCBb68o2Drgi44y/TuwOuehKrbYGk2gF2ljsMKGUPhOL\nvWytGrsPFIFP6nSK/Ocj5WDHDcmrp3vU2cWt9dKuWYELs19hPs+3WA16gT9x\n3Kk/5Bn2cl1ZbmM5W9c7hO0CgOYWEc9pLrQ5VNMcURatUnob22HujdB0q3aN\nomaFsuzC13P4lO+09XqE+/h+tsQXJj20LlPsA/EyBJ2nhswkIWRlevRVRP8E\nESBlUB7cyCii68pblnff7MfRL18E48q+VdN7QzVOmd3YMQetvEOUHOWM+37P\nLf/e\r\n=BtG/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6rAr0LQXOp/a0gU8McxOfXeDirMjbxKTyUTPAek25OAiEAzbEFircG21W8AUuQ8KXatReI+k+e0czrA75HRlE03tw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.10_1572267164371_0.49027778762555485"},"_hasShrinkwrap":false},"0.7.11":{"name":"@react-ssr/core","version":"0.7.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5d3a419293f1032bccc2b85c7a12aa7ba4454900","_id":"@react-ssr/core@0.7.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DtnmIPHkgvyIPEJAT0Odfmusz9UUvuLDjlFzC+SlMzOlpImuAzMcdM5MYlZ28yXKoYGbIvVSmV52PjFCiJlhjA==","shasum":"6b1be38be0bb2193ccb14d66fbab2c291e1a1239","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.11.tgz","fileCount":22,"unpackedSize":50234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtu3lCRA9TVsSAnZWagAAXYIP/32Qkb3Fre7hLZAPBDCG\nOkNBkk1nFYygEWFXM3yKCfX35adFQ/aKPKCyaeZiS9ngAHISLFs5hhBQkp7Z\nNTgoBFs72Y6JoymbiogjWKpPPuN8mR+lBPXI/PvOA7SuwWh1pSFAzhBZr1Wu\nlU4CkzF4zMLGEpYTUD7ykWEK/EjnVRvx+oXfkeHPhrM0j6EW/Vruhoyfr+Ze\nlD6ciwY6M0TztlJ7wO07qcEMmacBMPWRsH+ScN629s4VFlJ35Ue2D5r2w6Wq\nwVPwPg4vq3IVemmnWtKKu8FQKPtp/pk2GobldJTSMbrp1otpXBMffTbf+mYT\n9texFQ/yTRd1EQ9LkIaLWYQjxxAHQQUtCGZz7gArzud9xeo3u2RvBh0TStQc\nCiWG+t9ySuCJOVj1IKBqzS+Z+YH5juoz3M+KI8ENBOdkJiqfjVxG/ljo/v6x\n0u7Y+EYXzeHD3mOmn7+hOujhqYF0eNhYKTQKP6tkdPvNWf4R/A6Xo3NjflRB\nQ8lIK3c8xg++SXqC37RCGXSgdTzF3Um5sl8Pya0YcDdU2D8n9Zi6UiqzNYtS\n3Vjvt2+8NZunxovQw11byzKcJvY3Jq7szTafr2Gs5vnAN39QoXeHTdzU+GLA\nvYZUBk/uJ1zV9z6bAu6Ozcr1hjE7GRdKRjObHZCcYO5NMdtoEkdg0jjp6b2z\nUXE3\r\n=S4Jb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNsPjUEzemCo6mdaa9M8wkmuPICGaQQgkZKm3Q4+dx2AiEAq9swDZW3W4tKXqM5fRyJMH5LoYuLebGTcOGg8bwYo/8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.11_1572269541383_0.9663454604591633"},"_hasShrinkwrap":false},"0.7.12":{"name":"@react-ssr/core","version":"0.7.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f0cec7e2fb6d74e70d02685af438c34a74dc7b78","_id":"@react-ssr/core@0.7.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-y4cfMF5gynAsodaBLfHYnmrL+PgfAR12YYt4zfQ/Mw1/vvtGzvybvxHCtGWs34Sear3zgJdkUnChzvCNuww0rA==","shasum":"405b0b89843b542af4f26efd508f97cf357012e2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.12.tgz","fileCount":23,"unpackedSize":44786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtz8jCRA9TVsSAnZWagAAVM0P/1Hbsv6+uj4CdBovvv+f\nBzcnN4mRaVcEkB/JOup7G/hqATyIcTWxDeXuMWdgJhL43n8mqd5c7+C9Fn4U\nd+aHuyWk/dmvBq5nxYjQvtHeUsdW0OYcPgb1CAF6ZYzyuaa8JQYNES7oFt9z\n6ZKqF7e7jgy/ekxm2APLQOhXxVdTfPJX+QpH8BV21PnpFdbs3KJU1T/C5ye3\np8DBx5lHkOXPbGjCTPRpRBm55YJaE5LIU3OtaaJNExunoch4CurpauLEvzDN\nt+8oQgEe2FgTAKuMOeQn/VbNzmINvuKgcEBCuFEUzjfeXEo5E6FNDbWETnyM\n0RyQgabeo/K+kSosSXspyAdTAX2ApaV7hIk77tyvDEWUDBT8rmRmc90qhTe1\nwPAP2BVg4QjY8/H3rGVQYTmh5/bmIwumGDUjQj3UR0OCLt+qY8xmgBZ/j+4U\na75778HHX3q26h8ilEs5hoDEd67JTHRXWRPvrlY5BDsKdwbYWGhLTG0bMab8\ne/6dlZi4KFQdEviID+9Noqr5c2pJgcG5aDg4oTm46xBCvfsKx0zXJnz1hpF9\nedfjEjDXofI0fvUOJWdC32DmgAsB1Ur5Xu9l/3UVbK7lSJoBc1gyUn+Mu/vn\nl3aXah+BGWFV2VqppyfAxoOsWiDwMUabdOeDW3wnnSN0XcIZdcC+xVWMYZKD\ne40C\r\n=xowv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtnzKs2KzwXwptxLzzfP26mGaAWRMKzwW32xGdcJNOBAiBkP+4KMFLmGC4hdELvtRYP6yufXVaW4UADw4mZJjhL8Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.12_1572290338673_0.9113158429701909"},"_hasShrinkwrap":false},"0.7.13":{"name":"@react-ssr/core","version":"0.7.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9a4bb8a38c741bbef8515797bbca89006c43ff9e","_id":"@react-ssr/core@0.7.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/PXLb6iOWwXi00R19QkKKtKcnKB+ny9FnJMgvY7Dn7NXmIY7JX8XXVj8SVS0LymiTx9WCBN0y0QMEdWHy0Q37Q==","shasum":"ac51f56e64746176179232e054a5eba2433786fb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.13.tgz","fileCount":23,"unpackedSize":44966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0D5CRA9TVsSAnZWagAAnYYP/RjoXM+p3VZs+2yzHPqd\nKhGwTR3aUk65GtaLkC5hyBPQPTQaBCemfC0eKCRVFdONlTI2+/iW0zNhhy+0\novUfu8MLzyPInVinc0IoI8gzq9UqBj1qTMD4sX8JTC+aEVqv1SJBf7mfToPU\nIz0KqyS2uy1xtABueNmVHgzoNKF31rpQZcmDhJkV5PQRdaAxmTdap+1XpQGX\nZhw3878YguoHoLz9AKk2wxN2B/RHdcEu4luc04y8j/XmMyA0VUBRZryba3MO\nTpGPS7E4Aa5MKRAwhygaQh4a159pmid3iYpee31unCurp2Q71YkqQS8r281g\nNnUxBlN+90SskaRbdkJkC0qeDatoQcAY6DEBsESQEfnw2Q58y+PaIvUUYDa9\nhxDtqialBN//Jmw4do6P4Sg5yYlXwDQAYB/6KP7VfS7MCsn4Lv0zhVKWJ+9B\nxM/HMg/6u/8l7iHXSqX8z8X693rVBs5zKalF9OL2R5jy3g+aHf0hby9fmaSc\nnXw9IDFzTjHUunNebc5lpNJgLL2HybDajxx6OBCtvyLayIJJsd8p5yPyyoxD\nnlIjrSRxip2OMGQSm2x24g2SVAioVvZ4kOTXvyVkChwVARrbyNrQLol+3SjX\nGX9V6lze6ZswU/6o7omuAmkYxpLvUjGm15kn5MZbwQc1B3Da7htnXs9RRzt7\n36Ll\r\n=51UH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHJJqtJC2c+eUIJ4dE+aNpA0NVHrjZCVyOuu/KvzInagIhAKP6jjWqDTLymih6Ai+qS1sJ+FZ/I7pINWCbQnpaNyHp"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.13_1572290808520_0.7628987797328166"},"_hasShrinkwrap":false},"0.7.14":{"name":"@react-ssr/core","version":"0.7.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c203c66e0cb8ad1b29e4525f97139a8cf8d6448e","_id":"@react-ssr/core@0.7.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-fhkMceb5og1Jlu3XbQCOlyunHD7yZaTuHoEg1mAkvrNmnKcTye85iDkVIHIZTO1SdGWbjiuyoVY4DJX1VU2tQA==","shasum":"6dc7a4ee331bfba0050536050380cdd644e64f0d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.14.tgz","fileCount":23,"unpackedSize":45140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0LoCRA9TVsSAnZWagAAi50P/RviGLSIPh95kuDIohAr\nQGpVAqk1/Q9AuLmWtrt5aoEhf3N8/ZsQg/s3avdEMDT5QhtpkytKzS7NL5Aa\nLfZ9UyrdGqs7xWeMWBMSG4vPU5UTAyd7e9MXrVr7RSKsTH0xAtpZWyvUSZOt\nBY1g5XdsaCY3r/52PiO8rm9DZEknlH7AbiSUM0Uu0PqcVEv90POUGeWgLwWF\n7W6hhgOQ0/R1W6D0rAGieyxUbCYWYfiqva2J2z1hVxtgd+qXbBSeKYyIzn79\nisqZTWYUcUVovkj3WLiMTQskcQpR3iHG6NchDsaMnbr3Wv/QnU8hAl/PhKF/\nlvGHcrppba0gLe0HK04fIpGUayl1lHVSE5kAiMlLxEBGsUu5o37JHOJjqOOU\ni8TN8wzXRYjAjlwMosJUMHtWX/aiNyMEf0nAHsYNrViSBc9lqThJshsAKGA6\ne9tXkgrEKegXp5FvqC1n/h+cOl5Hza5KFt0zwhiSlYvIF2ZSU/c0AIZhdp7n\nM4lzaie/198Wx/RkMgD7v8PhLCqpgOWiCSlFdsQHpRdk069LqOWSTpWjE6Sn\npqBAOvRmjWAjAmKEOlJVWxhBLQBYjOGqBrqkgI+nnl5E5p2umogP6anz0y28\nyjrKRaO14JwNKQymS9lId/j3ZK5NOYB+Ab7mZzEnj/b4C5HpCOwRPFhOMQ/c\nhw0J\r\n=kfKH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/YofZF+tNssvXNRsj1OeTpnKUKSt2QjA+F0ew9nz2uwIgM7uVwntKHG6RXM68ryt/Ulcbr+mS2NsG31Atiz7tFc8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.14_1572291303898_0.4845268467143855"},"_hasShrinkwrap":false},"0.7.15":{"name":"@react-ssr/core","version":"0.7.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c52c16f57e1758249264ddd5f9eb55efdebe620f","_id":"@react-ssr/core@0.7.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-6JdyPAOajNKrfFfNxTmcyn5k9c+SAmDAteAjX5Pm85/OFeSnXg9LTHGQMJFnqgfB9EzeWGuBy7VAQZ/nvhO5Tg==","shasum":"f9bfa0f2f5fa67bba1ec8e6226199aeee96f8038","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.15.tgz","fileCount":23,"unpackedSize":45069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0N4CRA9TVsSAnZWagAAS6gP/irby4oXkPAf0E/f5gGM\n3fQfyKc7vrYlGpwp1XLnh8rzIGacSLqRjQfsDtd4K7Y7ijcOLvWTBnd77nRg\n2BnuY0SAZeZGVTBdbRybR+Ka7xqRCLZriDCybE2DE21gYoV1pGTryYDOmS57\nhPS62/igbFkK+LDmAj+EGlLpEZpojJK+KGCBJLwpo7d+aERNeC04eTSvRpxp\nfNmsy/MNTYNar+aUESLNBaG7SWiKTBbLEUIHw9tE0M2lu2j4eUFCXtg7ES/q\nvBLBmUhlq10x+QvBghzssJsuzCW3UVBycXPhThZDxJQgIZoZtC+4Ooyx5h2x\nE7UfuC5T4u8UHRbcqYNvvpVkDiAaTBcYr5P11OSkndGrhY/TCb6BIDXA+AnV\numm5oXv/AxVbMYI7fEOBVfjb9NzKi2Ag/jzWpPKkdfZeydcYtHi/8bFhtUd+\nnxVMKDAEujwCFO7Ln6WFHJpC5PReXmlsWDEAcn6CdK7lkfYPahoynfBJq3LS\nLGcEieWfOns2eRSENyYfyy11wz1WN5hp/TImOute8AVCV6SH/WzQY+nKSKhv\nJ63yDcteOUrtpmLOjS9m4PrN73eqqspSfzCTA0jG1NLF71CQrbnS5SChw7nL\ndQcWNkvmzUl5/DMkQV0jmnP5E30Eac8977uE6/Lqe8H6dDajt+Zyxpq6TL8U\ncSYS\r\n=RXQs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd07p/kO2KGTL8YyAnMD4cQH86Sige9FUEISAhHknoawIgT6AfQ535uf8JxWRrOzQJZj4o2SUeSh9ZbWsh93y06AQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.15_1572291448466_0.22611885336360493"},"_hasShrinkwrap":false},"0.7.16":{"name":"@react-ssr/core","version":"0.7.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0b25734f16dcd6b18e6a191b8f37b72aff9a866f","_id":"@react-ssr/core@0.7.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-s4yR4+2amukPG8M1NASlbOtUhgzzlhxYf2yxpuD82KOnlI8bGu8CaorGni8fKJPwQJCyIYTMDmKLvyV8o7NrDg==","shasum":"34960b6e7f1efb6b87e044a520e957f0e9b34b28","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.16.tgz","fileCount":23,"unpackedSize":44949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0RiCRA9TVsSAnZWagAAPoUP/2ULV1xW54bu2gxd128Y\nrZEWvbQfA8Z2ljSpjRf6TdskwZFDeVrFUCP1FuhgDPS1vxOpE4vNtuFV4KaU\nB9WE0yCKKsMsAyLU2i5S5fVb2IMdH7GHyjC3eOMf8lq2xr74FBZihxBbVNRl\nhgGQHjCkX7OFAPzk2x0UGGodBj5ZQiaWotKQZW81wuk4JkOHZd9N51fRMJ6U\nUMrI9fVjJmdJxVuY6Cepn787/44gIS3Ohh2b2C72CGBNHrFC0An8Ga2cRtNK\nTzBfbFglJP7XDSsyzRC6cKbA40GwOBTMVeibfAtX5GJha0J7bVWA9f0y8L0+\n6sgUEyBT+WujM5Pe8rkQ+YjCQxR68culinDP3XTcbvGdyiVDl1zeAJm1Vctx\nOky3mw/fgGbeMzfJvSJ7A6naipUWZLrvuP1JOyyKVToMeXglzV81npDo+Jn9\nM8weHzHXRBgo2WWHhZ7UWMF4EqBnLXoIrULkbjMtwe9zWMLq4JvdQ1SG9T7E\n9cJkNU/dVpHzKqVsArToCtLXm0Im8/5zxymiwytx65O7FeGWO5dT9X6gcIJl\n8l9btSqRgvrZxSbBfrsNA+wx1rcYm3qqXuXlIEcWHVcWAJK6c1amLwfA9T/2\ngaZUT7UKktpzwLXx6vsMkJTItD0nv3tWU2/WSCNKqK2o5T7AwRlYm7z/yKLC\nHJTZ\r\n=h5pQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7dGacEZwJH251Of3ZbWYKjkxO6QYz1z8IlJ+seFN1sAIhAIooa5GmY4QOiowp7l+zdgXipwCj/fmiDyiUKyNWv4Fj"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.16_1572291681691_0.8640832251809163"},"_hasShrinkwrap":false},"0.7.17":{"name":"@react-ssr/core","version":"0.7.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"79175c22794b32c36a4976aba17c2c90016bbd33","_id":"@react-ssr/core@0.7.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-50bLMOT7tBVvvHbHjuTJHbbw4tZRNyj7FStTFX5KbR0wacB94demYaY1KxPrYmekU7gMRAyLQbo/i8/Ws76V1Q==","shasum":"345ed3378cf64ff0826bc6f5ac19b6361d2c3ab2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.17.tgz","fileCount":23,"unpackedSize":44979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0USCRA9TVsSAnZWagAAxmsP/0luCKRA5cCZCP/I37tb\nQxwmix/wPzUAyKj9PJN3Cyib3+IpppwkgoEn55ck/lfZnNxqDwC9Mow71Auy\n8AsNEM08H1Xb8zSh1aAxtSjdcDIsvBTG7OcH/4QGeYtz4gQeHf/JMYLeY9tt\n5V9wWiWeK0qrxPS4Ec3xQjsw6m8Eb7J6d7uv3gYAvyRbQJV326FabVQuxRih\nCRobKmluZPV64ISQp4bpWY8cL78pBfL1Gog7hbjP7+ujcYSiqFnYYgEvm9Eu\n8/TtIvXHIZuCptlAX4uYkoPbytF1tt30P63dgVbbiVqtNX74iUJQsr/Cso4+\naqPNX4Dkzh3q7KUCOdn+yLqC9MmsShkI3I84gTOGnyC61CSreMol47ovgwji\nRZup9txGtnRkgV5TZikudca9C6Ix7WcmmfrKjam/BdxZZPOImUH4RCcuW4I1\nHxZNm2oxSILU6eLy9X/MtsNPAFjb5QKTZXLC1dpQL3cW0xu2uriiTJFkFv8z\n+WPNEyVCAXPSfOqR9GpzelKTPsKzik9aVVBgr/ivzryXUmhkQ6JVeq38jk1y\nKLTlP3e4Ax856POc22hb1LXwT/Uk9vGeWIK7O2vD4CZjjs/SYtM2aK8TUz/P\n+13IToCUt5MwSmXITEipkNBDpT9uyp6ZYqLkmJ25UN+viVKwE+U1Nu6/XP2u\nJmWZ\r\n=bWAb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYEGShBG+XH1lgV6GiEsL6gHhieXedaqGndW+VQ/Eg1AiBkWqvTbSO6x2+LMLUtQ+vzNiwQbBaPmgQAyU7M96N2nA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.17_1572291857563_0.8263372112902407"},"_hasShrinkwrap":false},"0.7.18":{"name":"@react-ssr/core","version":"0.7.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8849f840917731710492bac3d432f08cd2b9f1c1","_id":"@react-ssr/core@0.7.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-tqWuH9pOAkfzkq3ssbfjD1McewgrnjQZ4M87uqNu6By3BXFOzL15y13ySfyDL0ENv8FtpVEPSVb9I2mzgv/1Fg==","shasum":"270616fd32e1894cdeb8023f2f2ce1ee90e70b46","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.18.tgz","fileCount":23,"unpackedSize":44982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0r6CRA9TVsSAnZWagAAyCAP/31DIyO838dWAYwzUyU0\n7PYq9gMx/AsSSCx6HEx9K2QfFiVZ06kN4VuJRzOpeVkPBajaFdGn4mnR4jU5\naMoXtiMvR0MI2e1duqauYWLzsdyvXeRi0SLVPu1BAQrlTjU4+FJoeqVsV6HV\n6a6WhjfV3x8/kdqTClFaxbdpaKxjVPRDarJex8WyYKecafXD18S75L2Zt9SF\njBZ89p58VOCxTOqwmAGT6EN6sTGKSNI99LmdDFGfRSAx/zwDeOwUVsWYsOpk\nc/mApldWJ6CvTjiygNvRG4T3c3MFparTm+qa9j/m0nOkeTUIfBDQOZ2AL55v\nG7OaUgP3ykdd2L6ty0+SAvf6rlQZcoJi9+6N2impjWd8X96oi/s4p8RVnktw\n5XiVueq1HugkVF1+6hSz/Zb3kQ/emlLyAFXKpWaBjuGAPI6PyhNLTkSspl5h\nRzUfSzEscqRLPijY4kuNp0i97g6X4BZQGsVmVlaRNHuSyVjr2FZwYnuKUanx\nt+4vi3sIFXiBhJOS4TpKBRVvSva3LgxHrK1iXx6tzvp/49U+q18vMpLIMUtQ\nrRYi1johjrUqupHuqc/MCqIbOvRqHqxWThLIZ1NFHOqh+fHLEr3pBdnQw3bz\n3Qkl9koPLLRQW7q1ZWA7R6yQp9vsR08ZVJmmo4KpD2EApX80iMxmmvKMLM9k\n0rpb\r\n=rHkk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCls8hUnXvI5C0SR32ud+sSdKfrvcm9O8Hknh6gte3MuAIhAL5Qti+LOQvkuObqsvl0rsQCcAm59kIegnCyo+Qqchvr"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.18_1572293370465_0.45387993830608586"},"_hasShrinkwrap":false},"0.7.19":{"name":"@react-ssr/core","version":"0.7.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"26071ac4000fc9870b97eebedd32c79f8ee5062c","_id":"@react-ssr/core@0.7.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8a2760n/BNIpfCWOcaORF3hprIQ1jfgwd/bP9+ZsIGgBgphUNfEHcPupR27lU+Ix6M3H8RT3lwSRqAQ2sEHY7Q==","shasum":"63f8bd3be203d5907557af0908c40bdde223c3cf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.19.tgz","fileCount":23,"unpackedSize":44931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0vJCRA9TVsSAnZWagAAO7QP/jVkepZj+A7HqgALpia/\n3D7e/dRbMzEGuzk6N16S9r5aXMg/YY3Xuw85dEK1XHj9sprAogDhwaiMxKS6\ncTeiBfbzhFGx/ZFZdIeTLz3jYdSgnFkteB3rCG6DA/euMFZkxRIGz+Pw1IJ1\nHp/e9ORTMkeuGSf9Fia0Vh4ae7bgRhPyWPpA8pO8TiJDNGP3T/hU2+eTxyaL\nDXnJG/jCelZrI7qMJY+O0YQA6jd7m0ZEf151dUo7TPoELHF9xvXHRnpm0m0V\nb/HppWNGcaKK1zsBmdYmPPPH3vgW+vDPKcdQ42HtffMWzkUd8YaS1rvOS0lt\nbjb+9sKY39GLcyJUBT33HzDxeTZSssW7jBIGbx+cmMB5xGTYGXLOG665jFzF\nLCgd7VCdtXxG5t4/e//bb0WR19gnFgKMvfmTyDBVcNEdAU5k7rwchuEAg3ml\nIChhaovwsqd36kgCdwbJsrUZuxQg6fR74tAwFqTD8WrEnqmllIuIagUERKaR\n8VaPFKtVuKckoE4TMztKco7tezXWHMcj7nW9b6tzcbgd61/f7Bh1Ro/ZyjZ0\nVIb6MAW5WZeDYMJw542p08ZRZunYu7Q+ocoKuwdpQiwiDuX3daqfjLeFoZs1\nScTjX4ASjXo47XOzrinaT2hYJLdIwqZ9XYvY9qANtadcTNaDYdspGxzJhNYc\nx8wH\r\n=agvg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFUNSGUBpxtLBGvOr2wCxa/y4VMf2mRKl4aASIpW/s/AIhAOno1W4Sysr4iYV+PZtPL7feC6lTzx0fccM6blX3OfwI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.19_1572293577206_0.4274865704103583"},"_hasShrinkwrap":false},"0.7.20":{"name":"@react-ssr/core","version":"0.7.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"44b98234dc2445c5a7f87302eb86219964b5e546","_id":"@react-ssr/core@0.7.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-EOhmkD7cCEa5fZQY4+byGcetH9tdTZn56mZTUBqMqWup/BR7DnxV18H+LIrnkkn/qczMfr1gkd6fsMMx4FgePA==","shasum":"b928de5e9283cecd7dac5241d8ce0fae7988d283","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.20.tgz","fileCount":23,"unpackedSize":45060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0ycCRA9TVsSAnZWagAATKcP+gMoLE0eXqouAzioJwOL\nbChJTSaFMHu1Gpdq7v2X+6UlN/FqC1fcRaAF72mQgAkr8+DT0do1g31h5Inj\nkA2L81RHnm65Dn/Rf5TqEboBAk0p7xC78w0HFvq+AjQpjymZd2p+tN0eJKoL\nheSCaHJXJ+EVQrYqpZk7FeyNs3J3EQ9SJFqUPoKQSoYSXn76ptKfw+2t1ukK\nDO5LNKj+3il8pchn/9dc4TX7cnVasnKAS3F0QOv2vbATE9CDhnfzxM8UzJvi\nAw+AGU9f3x8KN47s90Wa9bwQYVT26udBKRGmL1SgAWd0i5EQ9Fxp9DiLNP/6\n7ECjdzMeiHXZ/chle1BnEEQiGSgduGl4UQ3vaKn1tzykrT53i9h24dGvhUma\nOP2k3oz4qD6DKr94MzU9ZEHfmrbvQNjf84MWfC8W90SuMXBATunDwJ4hUjbi\nWy3SH0w2xTw8DVmp2jRpZwgzvlN1Jrlku5Eh6l3nv1X3sc5emuAfGjY8eUJj\n4k5FfmFPkxZ+VZNdZAuLeFwbYfNBimndKRgCWqS9b1U4mWQKT+U3Rq/31mzq\ncq4lP3EGubbE7HZDIxBWOLKihOh8yPZJpkbrPwDezo/i6K2gUipvkw7xgoKB\n2RweAQV/LEY3uXRaSaZhA63Jm+tlqKZDI6M/iOyzuky6UC7m1cvC3ZsmrQL0\nKhYO\r\n=q3YR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBB0KwpAhE2G1lEltxQus00Wpok4it8QcnOeMBJOcqU5AiEAuMpjR8LG1LtqXfPEiGLDwQILfLz+9nm/1pRbMKnYRPk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.20_1572293788093_0.310895194855471"},"_hasShrinkwrap":false},"0.7.21":{"name":"@react-ssr/core","version":"0.7.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"16f78c034d72b6d9e3264ccfe8a302feed57e673","_id":"@react-ssr/core@0.7.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-zt7QkSqkNLgJlnnIY6nBo9FAK6poVRH8Us52Cdc1fsrBeq3Hd0aEznJkxFGXQ5rDJNBg2q2lWgFwanmtfhBPYQ==","shasum":"be312cb97d9e6008eaf16385a63f90d6c7630d77","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.21.tgz","fileCount":23,"unpackedSize":45026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt00RCRA9TVsSAnZWagAAaMkP/R+JaPDJYxgpyeuLKw+E\n4lD7CfvAhf/ciagzX7s6BkBEmzMztdg9fEx5tYesHgQ/nJibyBPxAE6f/Dju\n6ShXMw7BSK1hbHoe/qCZjth636fizbNzBM/LOGIdDFXlw+Yv4FaDK2r6Wv8A\nYcoBtP4iPolTxdPbX5Z/EYXimyfQ6WTuesIBkqDGPC+mCVmR65r0QwBXpORL\nGu+1W/CWBypaRL/lj1iwkxWCc4JLg4lPQL8modl+XrOxLUNG0g1k6w7bukCD\ngfck6ho18U4zCyo49tHse2gXRx5qjBbX9oiFHONnF0JzcDfYBqbZIwgwZ/ep\nf9Gm59sxZlpG7q99IkPE4kP66kG5lKsNaVIxgnPkd9jt4kzFeIIOXDct5PP7\nZ6S0m7p9nymueGuSEKzeYUlvBBC9Nhn5nbPlk/f38xuDYkXk0z6SoaQK5Lwh\nrRrp8zsjHzGxu1GWkUglKMuJ+M1s7OGz4QWqXICRmdwyAtZW0VM3RbFm6do2\nAQL/bCOdp3ASgUN4/S07M877T1UTT7rTqrkx6BW/WR6+EElb/B6Kc9NGRxU8\n9lXmuoaSLODpK9hdYOZeVZk2zk0mA2eKtFnGss8PHoMRZfihNNJyb6gle4DK\n2iK223C1XaIaHSptzO2T1p28o9QrzyjoWMgc9+F6BEjYa06Wwm0iv5zXRb6O\nYGrI\r\n=AnOR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBr9d7LuaBW4setkkO8eeWPePuBKTa/4S4kzMOsC8UMPAiEAhHxKk0pSB/zjL+MfwPDiEFrrpoLQn2N6eThpAPAvJSw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.21_1572293905403_0.3461056341084603"},"_hasShrinkwrap":false},"0.7.22":{"name":"@react-ssr/core","version":"0.7.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5f4a4d1cf10bcdd0c52c04682682e35762d2a5c8","_id":"@react-ssr/core@0.7.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-xPYcbtVgw6W8PGTlNPPV2IFazLhOihfj9yn4g/pzonk4aFGKL6/fE6Q2dNxfd333oQUwgTIOgltdBn6doYlimw==","shasum":"3bdb256be52c27ff59f8b4c559bf6e081c030679","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.22.tgz","fileCount":23,"unpackedSize":45015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0/jCRA9TVsSAnZWagAAmRYP/1p+I4Wl5qXLBTUfqqSE\nooA1P1CTkK0yQ+/T1tNhMBGNSHrHEBVJfuwxjZibkNJ4xSzgoE7Yx+Jxb1ZT\ngymL+H1PhUCIk/YukbO0OhqEq88F5aujlp0wA1geME2FbsfI9lIwD/bmiK+f\nrlCLuXLdILPu3CYPVhEcYehHdTxt8ifXG8Acwlxa7+ANqGfZbFytsSbZwoIY\nEHJ8cDp6kHmC6kspCJSeZwo5Xq3+7sVBWwujEfGOLs8ZTHPqP47fBuS7yEoc\nw6F3nXurrQKBh5GTRetqXhjEtoAxpjbj0xeBWyeHmsBUBgV/0z4aalATglg9\n+cA0brru1i5YamW130KNPCdA1hXjEkFD9FHPMnot8fXWCRFM64YCoDEQXyEg\nzpO67O/3C3eY+nNYWK8qyOv/lfKRnzmdZE3HmFPMFYgm3UWNFD+BNPzxaKTY\nkKuaUsZ4+JA4exET3MYO4BccQfRogMOT7WbU+sb9yZ8OwjmuflsOlTDA7iMZ\nnckMet0Vd0syuzYldJMMY6RMbxBRm4SS7SeLpcqKSh5LMLTjUCy/OyxZ6/eu\ne/qqBPhBt8Kt63t1QVHszF2R7zuacJePa3xkpYus1Pzf7mcUn1DmdBPkUmBE\nVNl9sH19FAMBRAqqmpdkdrvNEkwX3+04YqR9H3Wwsfe1eTA5gnNj7PJr9oeU\nZNLg\r\n=/9yc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTD4jTUXNZukx8Mbrmmh5O7i5iyStuvZ3uDDiIymqMBAiEAmcFij/7LQw5SBciSYi6H7gAa5xv2NAr0JQk3TEgbL9c="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.22_1572294626663_0.5553977109999038"},"_hasShrinkwrap":false},"0.7.23":{"name":"@react-ssr/core","version":"0.7.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f69eac1a0d7977f764fb65c84a229388ff47675e","_id":"@react-ssr/core@0.7.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8qOVT33fkGWw0GhSVOPBcM9Tf/9QMp02JBxhDx8UPI0PochLR8Ujqvu4zb2chf20OEZJROpeTu97evgAGcknzw==","shasum":"b195a52a69a17b65d9fb511575d7674ae74b6d27","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.23.tgz","fileCount":23,"unpackedSize":45049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1EoCRA9TVsSAnZWagAAIVMP/jk9OOptW9uVlReSBgrq\npiX9yKbPCmykkEOtfCojALwIx4BrIjcSMkgdnghS/cY9NXc3y2yDAbCXLyar\nOrLr37CjmtdC4zr5xhDMQKM9Vt/geU20yopBHs/So+IMvzMiGs5MgQ5/bDNd\nw7AjWJRzBbaUyDMmyEgaGf0BxTxJQdQzlLugdxqOncmLYCquE6QJn+8b1u/t\nk28JYkG/ovSwbRlj8cZglVmWlkvYlLDNBwsCShX12oqhCuJeg3oqBAnIyeti\noP6mQhkQHX8C6mD839djZaoEmuDS6HifzM2UhX8v4jkxzstu65GnzhVg5hTZ\ns6du9LP3mMncfSwl4DdzEHTIzKp6KTrpEM1sXc/USxThRhep3ONDbIZHo2uY\n0E3ivUZOIvLxF3AhuXG/DpWYP5OPFI1F17CujgZDhX+FgK/X4Pkyin4He61O\nft2epPNapjSbkawA/ZuPHwAjrJiCWqomF0J1y3a11/94eVM4puLY7we9vkD4\nJ+1TKCSs07CQap6s9Crqs9VYC2LQLGbdtxZm9qv/HVJHj3uxTMQdGzms7+KB\nDyt3+lNMErrn4jfUTu8uxWeUihIDSsDfEA1n1CdYg+akQjNzsyf87BQ7s/T5\ne5zNqcRDuZVzZqFID6SotaKLftliNzvVNZXlevhc3G52GV3RRm+sZ2nTwK7Y\nvzP9\r\n=bha8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE0aWeYfHQl/TCGIlSqnzWItkH8xBi6N110jOtHXAy31AiB6qiIKZfymCdaYe0UoVuXC1hjkfCDdGJRhOQFXcaaOsg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.23_1572294952487_0.45615187912501653"},"_hasShrinkwrap":false},"0.7.24":{"name":"@react-ssr/core","version":"0.7.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b33f0eb36dc9087fbc8167460fab1b449049a8ef","_id":"@react-ssr/core@0.7.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-m/zHyV10UhWlaEWWDS6lG5Zu4CYNv3+MsoF85EOwE6yO3+eo46zyNZrKYPQYnOfkKoDwu2UXkyI9oWBXf1UyfA==","shasum":"8002966dccf6a0e3027d368a3dfd6b5049dc1dce","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.24.tgz","fileCount":23,"unpackedSize":45088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1H7CRA9TVsSAnZWagAASxwP/09ns+tW+aTIDIwQZkf4\ng7okmBPvzXH2/n41wb1+gXeDaLzYLKt1JenF6qbsS3KCT9uP7rZzUhFa0w75\nc8VmIc15kUpP034UVLo4bxNALuTSXy8vgSKNFPhcbZ+Ed82yuJDvQT2fxUc3\nkVhrXL2LFsoxTgHIeiBTtj9i/ennEGtfR7oTpSJdaOAOnwEt/PYEVGzoTBvr\nS5xf6FUmjqU5UEyGkE9XKX2TaKGLrwxqZzWp1iZ66OZO6/scm0RWfNg1Z8BG\nNegSZuUbZJjtLZmv/iCcI2fcnPqaefBgrQc2lCVcPOEg7eQmEX4qqNLZ1Wlb\nkIULCd96r8hN87VCnZ/SaTY5jdFutzswQaFQgJcKDJ82HOKc2KN1eajm67Ga\nElgGu8GdEJcRZDlns1hekzVDkICvShOf3SeBFH42ElqSD6OlyCE1Jb32WChk\ncAleFnPsddkyVvs3MuIropat+ciMol/Z6IM+fT6YCYZU93HZVCQFuMOUqJfb\n33Lbt/+Mbqu6xDtc8Aa3MyXbwMNSut+dnISKK9vw9yPl65yqyS6V5cco1WOe\nJMAX7xOdWFg8jkLxFKaPBe4TfjJ4WBJiBQslAby0NwDs0RSXKl3ZgL52hVpn\nQey/tJeOwJd37UrEdCyLam7iH+AufRJgFSLl8RrQ2vTcuMm3iFvEsG7yLSrF\niqjG\r\n=MxSZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3K1575rvokYz567df+i+4KOqfAoTJk1tbjoTDTSbU1AiEAs6buvWeiqn0nzHXnqcTkzba0lqcGfqQ0O70Cgk6qDt4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.24_1572295162976_0.4843921753098539"},"_hasShrinkwrap":false},"0.7.25":{"name":"@react-ssr/core","version":"0.7.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ace0d3cdab0e6224baea8534b751b04da13e92f1","_id":"@react-ssr/core@0.7.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-MuJ4QRJ5mTAShK/6jT19NrhpexrUfQ6mcRVEF/4tlEKECP1fp8b5bdZdp5Hk1zsU8jl9l/a8gQT0Vh1KjEczXA==","shasum":"82504a3eadd25dabca0632f108eb54985cde586f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.25.tgz","fileCount":23,"unpackedSize":45255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1SbCRA9TVsSAnZWagAApt8P/jnfjOjCR4E6lvJpm3h1\ntEReaJ5St7uM4KrgA8jOc2BpwHLu8+ENHWOPrWcRoa8OxjGEFobQj05D/tL1\nY8u8mEpPiJsWlcad00P+TfsxDLUaU+K0N/StWSkgPGHU7h6w3RqGys5ZZA3+\nUGVHON7APx3rd+IV6Dx2grDNzkkJA3s1K/F9nBDGLHaioOVab3q0SnTTEG0w\naV2qsAAeFDzjuhwuJ2MNSchOi52I8YmkKKIL7ibruWng688AerRwE66wfWNi\n5LPfYdXyBtpYywQRr6j07ixcl0/AWxlmAqS1xddEBviCFa8xD2OSpOuWhN6L\nrCVrC2Fvszkjob2VyvpkNn/vuuc+Wb2jhiZo+A9ReMRFhTuz9rme0ZIHwuwb\nS0QTDwPuuyv4UuyvoHQsQdwYPcqqWQZlFIBPTA8KcSDIXfvPV4VkOnV0vVZK\nD9T1Dg7p0mRyC7W03MgKhGF0gTYFl+QdAAPTvS0IP8NI4fHmAsJ7rGMbsHsY\nELIRWnJs+BLyeV9H9uqxgZ8A43BiwtiT+a1AOyvHsRm4igl5m4ThC+5Klrmu\npaVYkaBLZujBFRKH7gPKaEpluuDqRztMRYF1i0dwsheWztHlFUVMnrC8zFUZ\nqw1JjZ0Ft/GynsTrQ4QqloWu5kfSvpVJTMwBoCQ0iqaiHxctQDOJHGc5dJty\nYEq9\r\n=atjv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIJrgdHHqo3Rfu+x2Txt3VP+oZiUr4EmzlUHJV+pN9rAiEAyjQd38n50Hrc9NSmrWaqIfA1B0mG8ujcrBrRWNsKH6c="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.25_1572295835164_0.718001238872197"},"_hasShrinkwrap":false},"0.7.26":{"name":"@react-ssr/core","version":"0.7.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"081e6674d650d67ba36ffa10a5f691acd1d74be3","_id":"@react-ssr/core@0.7.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SvosrixNPS1k+8O8GijWBxZ9QeBoajnwWZXTk4PBqj4+8yIBuDEG+dEPTfdaKG6f29AoNsFpXwNANw7LzBYUrg==","shasum":"8ed497a6cc5c055387d09784f73f1714f5f038bf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.26.tgz","fileCount":23,"unpackedSize":45299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1XlCRA9TVsSAnZWagAALDoQAKMsWYK6ABXeUHQWtavf\n82BY3s9+KUJL7nbaQGxDI4lXJv1ZQVE+HlpjvV66bUyaFCZMSCsICYPScd+b\nU8f1m09ALxZUYlU5wIGviRG9suTmCLV+QH9Dz+jmnigwff6Hja6G1G3jICIM\nqgepNeXe4g0RCI4qZLbZEwYNKii7E2DF/wTY+WrhczwvLWktqh0WfDHMXWEo\nfDNyB1EMG6Okxn/NexSvQ/4YDx/CRQ6lB85SHLnEhNEIJ/93aMu+Rbljk6My\nWBkYoBHHjQvesv7x3eZmfeY6w2KJPNMZOJCl36TWWAZwf/RMb4q0U01kNw+h\nJ7+fYmNOCHNGW7pLB1667eVkob+Uqn1hGVP6uSkYvAEoeZ17KBRv8SwJwWSM\ngRjVYN3+k8FcyRj9ZQU8ypeVfKFwYd+rWKA309dEc1VioiMNN9orWXblq486\nCiZqaJ0on9VnfXfw8S168N+7pMzfY5jSYAjWL6sfXHEWPm1R1c8x4w1L0mS4\nCjPSUX75XXyiLpge61WhM/go/ALJ4pDzctY7QgK9WC3ArY0Xttm3aYX8IXib\n5inKXLe3C1u8FGEE8t51VvxUrB5qVqhlClXJJ+k8k2PEylRUbqN8CpiPmwHS\nABMEJ5VTx4DQP7rVzhVVsNjN/4ABmtxO1CAiqG0WfP4/3fuBCQJf5aQgMqAX\nKdm7\r\n=5gqL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZyMaXN21DIGy61Dos/S2xLYj1G60m92cC2uz+RZklVAiArzKe7WnErQyoi6UaM8hCM2S5rj8LyWA80bsa2YIGruQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.26_1572296164619_0.07845110182203019"},"_hasShrinkwrap":false},"0.7.27":{"name":"@react-ssr/core","version":"0.7.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f38972bb642e0bcfe3be5836a5b26919b0087c38","_id":"@react-ssr/core@0.7.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-66waoL9wC+yEupBIF48zjHy4kg1PXtfTu8HvJTtGr5NBz5mlaolxe2tT/p45XaEhbk64IC98qNHvI+Ziw4PQdA==","shasum":"36ddeb93daea901d1b8165fa9e310a74a9a6e5f3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.27.tgz","fileCount":23,"unpackedSize":45202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1a/CRA9TVsSAnZWagAA/4cP/A7zL4fstXvrqhHuJ3/H\nCbl2wMG8XaXm5oWKUAz8S+hnfsCpPASgWLle7I3GTCf2yJX2hHh0I2W8PI4E\nt9Cr4RcJJWxxUzcMCikjOxjN/3XUW3kRTn2aIN9dLvsbQFJpt2K5wtJQo0Me\nhgHUfzfJtem8li9qRHlMv6veXgWUc4dsPpjgIF25O8Sbw0OT5GH/A2LZJ+nJ\nSNQUG/munRxWP5q7Kmlm6qgI6rYkYmwCXVPvaomiEXExnWuFgz9pyBgoRZVg\nIhdR3md5IEOEfAp2KFDJwxx9bVaNunfM8/fc2ee3B6gPO9k5S0Blhpd/MIiU\nS9KvIUzSH8B3w8hmclFdRABgpteVKFIkej9nV6+uDahyPYK1DxyQBTR25Bu3\nn6BLh67hO25nbEJknF7lLcq338nz0Ikh24e87rd/fbA936amXECFxIiB4ZiG\nnIulsnILZjZZipqZPubYHskvO2rgAH8em1izOj4HOv8vbfeTsKYXGKkBgKgC\nEL9nhymzSztf/TYYmcwaV6SYZSfTLtkN9+U5nZrtYzuaDS/1uzPMT3aKfYBB\nk2ins+PlaYOjQOO4U+STVxNdV8JF7cSO/Bb8jpTCGkGfyv7hw8rqTWf/h9cw\nor4WroHR4oKmgsb+f2C3NXKB8DSlTUJY2RZDID/ytp+B1GiGOVshNAZ58ltB\nlAeC\r\n=qcr9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZiR51NJ+abdXC/rjCrrjcAoyroKyNkVvKPBEf+wW+/gIgF2y1IV3+rbSZbvB6tpj2f6/p7lFW4Fyw75F4CRZqUwc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.27_1572296383410_0.6386762872544554"},"_hasShrinkwrap":false},"0.7.28":{"name":"@react-ssr/core","version":"0.7.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"720ad62b413b52aa365b0f22455a9a52942bea36","_id":"@react-ssr/core@0.7.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-l5j7B8cYxmhGhHV9m2Jpe4yUFo5taV+zyuqBUp19me8ovxEb2FShKkPIWKhj8hc7RwWU5cTnlUx/VsP88grSBg==","shasum":"d684749c53e1ba943a88b4dacd190de497801cac","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.28.tgz","fileCount":23,"unpackedSize":45206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1lBCRA9TVsSAnZWagAAWZYP/iXE5ZWVgruvndqHzLQu\nu5bHoL0nb3h1xPsU9H559mwyQU2BWzUvRccd1P/UGoicwgmR6QRHYJy3t1uI\nZmQySZU2BFZJy2XRCnTmBNwLGCNvDpZ/tYM/zlBmDS4/a9MVSeS38ao3WncA\nQaOxNWjtt06POUydNwvtJOWVEt6r6fLggDyF8Ek4UKzMSCXEzRi3B4qzJGDF\nva8Iik9+mdU4MZT4GYE9jNkqfL9uPD+lKDdJ/4s7S4nX/qZv9bzWaMZM03JS\nOWVB4OHsW2QLBOoKIyd7qRTb2VZ7YOavqua2TJTdmiGyvjXLdSSwhTACv9XB\n0j0xsocrVm8Kh9GD4rVDBBsY+cfdqjF0H1N0J0zqP3ak2M4X44H3kTR3s8lg\nsrkSdRLxmvhBKfhFvpPsB2fbsIjgxbnC+qj0u4cJQhEpk2H0I1rYK3vy4HzW\nIo9u/PiC2g0VtWFEmB1o0JdqWg1fmSfebBHx2RAkJDYGRKjkYqhiXn3s/+lx\n54U3v+niOVazEMW2pcgy7WNDzmFZ7MbsSiwhDMg6kHrvsgX8fMHzMKycG6lI\neK1wq5awWmHx40B0qgv5OwI37TuwLWBR3yAYKKcN4wpLCF4yntZ8vNseBAP6\nrsoHfzDFrDTHEXigva20N1FNsaHtTZ4Jrnqk32og5LrKyuxShswaLGyqs/IU\nkd5V\r\n=CPgH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIxq5xcrFZd03d55Jmyrawb4LCfXZRTaKJQBJ69boO3AiEA3NYNY8KclMXArRPJw5cW+vEAIPznSWYi3ku+k1nxONo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.28_1572297024683_0.17019901752677224"},"_hasShrinkwrap":false},"0.7.29":{"name":"@react-ssr/core","version":"0.7.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"37684feff02f3d564549db41f65198256f055826","_id":"@react-ssr/core@0.7.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HKGmtC5ZjJoZnMSSmbwiKRwMDEm4EtWukJGYosU+uNtj8KnSzMKmMNhx8OFAj3XO7Dd1RmmdjPujlT26Tc5o9w==","shasum":"be03b71af860733f11c0c7734dcf7dd0f2506083","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.29.tgz","fileCount":23,"unpackedSize":45241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1noCRA9TVsSAnZWagAAucgQAIXKgfNkrbPS0RyEo5YY\na1GrwIA2jtA6+i27pr7ClDkTfuQWXu0XjzOoHSoo8tC3l5CqIBliIVocpl8s\nVGH46qNPgL+eJfl/S2/rEb330jiHorQJF4wtLvpSmSrK9iVRg3AC8ePzqF7T\ndMMYEWnR46i7clSjfTQDZsdasYGEHYEKeJ4B7QoYBoIBSdkOOQQQrJ7z/W8A\nTkjWh6SOu0dcTVl0M33A1PRccdPLVeBgClaWgCmUtImXRTf6fuC9qxBxTC/t\nBFPZuGLiYIix4pzDcImpYVPhXGk+Yq81g2Nkg6J70W+YtikeHNgGUKGU2a+n\nP/fkYn6WidXssuOJjWP99h1M3qDoG8dhEy7NsBizuHmKO9PAcVKFFXkytFo1\nLKAqiZNre6ryQ7ci1uZ0e9dVkYsKtB9nrL0uymNvBwOotuIncTMnyDrYdHph\n+pY5Qc6Kgkccj5op75MX82lt5wfCfDdxN7QCIZfHkLZrAYdWGrZROMsAYkbw\nsI0Xaqe9gsncbL9ndXavTcnGYOvxqxpjNDPHyhtbjyOaC/b6jBym+puXJNa8\n4lHrMm7vd8DNKQcnTkEqZ+QJF9zI79a3AxurT5KUdvc8o4dMuOZl87tDjdcN\njZmWS9PV23mUPAlkj4ROFWj+OswWLIFmgFMgVE+HwHBO+lCVwTSoGCyj84HE\njftq\r\n=ehMQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG1Q1AiBbDjczV1NrqnNGyP53PlCPwNgeaQFruP3NB5OAiEA77k6AWPU2YbtTcqf+ytLrLWCCEOx0fy02OItHbC16JE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.29_1572297192509_0.6740979985910427"},"_hasShrinkwrap":false},"0.7.30":{"name":"@react-ssr/core","version":"0.7.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"71f4ed0388d6b737809c57d965471971dcc20708","_id":"@react-ssr/core@0.7.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YsjTNRYE7YeQ1U7vr1oJjzO1S1ZHY62hADXCQ4rES5NT7kXk4uVU5vB5EqkJqtzw/xYAL3Gke0e58xaT4CWzoQ==","shasum":"9386767b48cabb6854f4a9fe8d0f9f3932eb3a8e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.30.tgz","fileCount":23,"unpackedSize":45339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1raCRA9TVsSAnZWagAA93cP/1C1F5wTNQTRZkv9PsrL\nqdPkkr1M1QjfdY/GuFNhfYP9a2T+mNxBzDKB0gOJcoh0WPxrfzwLlPEeivkN\nd8FOtb8TBs/9u+LVwwIemSUkr9QYO9OMK9OMPmhUjZ/ObKvEne8EOMSOX5ss\n3CP/ShLah1l2CmN7cmOorR15R2QBbOj1HVhY8n8R2uPqT+NMXB0o61n2UUWO\n9C63Nrq371Q1IoGl7TvIPpgKedCuLT7ZzxCxIMnW+LNqHo5MF+8+J3w373Ik\nRSCVFQ0RVKiB8n0SxpnGs7zuy5YvbXNmKocYECXEux9aALwYb37VfNzxZm6o\ny5EbalmXJkfoEoRlLyj0087g3ajw6FQxj1YHnJtMUjhQF+biLoAYzQBYuBgn\n6JLZjO4sdzRWtgjFGvh9e3ptYJhUU2OkW/jDhGYhmBxgJj8SxCyx7+nsykjM\ncx5mze9JasvI28LZc1AHbJp0rPoqX4KfgOZ7Tc++PiFfU4gTUiXWySr0PmJw\n9OpSFpKWMUbPIzLmLNI3w/q/WHcElOjzBRjBW1dB24jwz9PME2MRLoJmfq0O\ngmsR1WO2RA3bJ7HOYGDfUjSN7YyPvsN3qGlUBCzTQr4b4eCtfD49LRdlhazz\nggw7IXTABU7O+xNtWsLL0MkjBFEbTlcYzsINnPadZTolhoa088jPWbYsjXbV\nWApZ\r\n=36Do\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8A+4Id5ybm4Omf6Xz1N7grDxWTHwmQpLBTUusF8L03QIgGAhFWnSqWGahz4bnZHp2gdDf8YajP8Rs9P0zLM+7k/E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.30_1572297433561_0.19198134934057043"},"_hasShrinkwrap":false},"0.7.31":{"name":"@react-ssr/core","version":"0.7.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"da8482fa649e367d03b1a5a78933773b0e2dc8e3","_id":"@react-ssr/core@0.7.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PBJ8K99HPoANaDjAIx9YOt/ikeWm9P6BdAD0CxFDVAkWQLnJ0pCQ6hrUnOlR4OhUavoYTJhWatBCla/iB8WxXA==","shasum":"7f42f2f8abc668a1696da5e2421526ff35796fea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.31.tgz","fileCount":23,"unpackedSize":45107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1yECRA9TVsSAnZWagAA/yYP/09rT71vJoApS3czwEcD\nBqOVdA1HH3XCYmY97gUTzJBASLqT6cVaCFSAanBAJ3mt/NnCD3qVe0dn7U4j\nYBrgCdTiKyWRC8b48YDPVMzxDwURikK5O2nseamrIfkBk4RQer08jfExItn3\nPdG0gj4mA6dpOdob0TvCUD6DBIKaj72GK0UzVrARrmWYsBHz2sA1BoRcytK3\nK6f2xJEfOXrwtn30DL5sv1jt+Nh3b71fWvjsssbehrHWcMZU/cOuZxT+mnWS\nkXM8eVBOs747jEmV4TmxZ9ErrSflnwJeTlUTgSoaA5wOO4oM9S95Z1ZEOUww\n2UXMatd7rSOCMFWqIiPqlqk6jp9gF0kA0Vm5+s2g2gi7h22xy+nB+aZHAvit\n815Kz6s/WKjSYLK2aVNGO93qinEkk1nMmMyjhrJ4b5D7BSdi0HslsNh3znZ4\nsz5yuxg/c6UiT4iC8evScx/M3GrMMG2p1g1E2jpQKFbGB+rCS/JWVwpeBVmZ\ntUp0PGGsTfFp03bxxb/hoUPv1Us8G1IdxMNfp+SjAaPVd/mY9w+CsShUshEa\nwX+23jkzFNBU4btzhVBAleiiPST+pQ0RLrdg3QoYLkLUOeERsivVZ64h+q6r\nmw9IwKyk99nxpxQyL19kivJQkXcmfv2hJN1C3gInQad7ifRkvGR2+8WnmYZz\nu13s\r\n=1HJ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1mmQCjBFd8RgQunqgYhsENC++sXIPP1PpIEErJumQ/AiAQTpF6jAXUOy8iLLkNwhguSkKvFN/xSu9TpJ4IOHai4w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.31_1572297859471_0.4773226802854271"},"_hasShrinkwrap":false},"0.7.32":{"name":"@react-ssr/core","version":"0.7.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"34e13e4cfb84ece1a7d59897b3061bdb1ab30d4f","_id":"@react-ssr/core@0.7.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-xvbiEfFVxQwGN8M/ya/9bZrnXSQC2W84/zemU7ojFbT0SayzdIcvmr1KMykAyAHUctHbxx8j/qtpwXm1o4gzRA==","shasum":"32230b5c39e5d7279711a686afaae6a3e653dc6b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.32.tgz","fileCount":23,"unpackedSize":45023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt10OCRA9TVsSAnZWagAAD5gQAJ5AAbNbuIE+0xheU1qN\nBR/YA0J4JpTQYUcFt6mpygN5h4de5QWaIaS99HWcUkfSDMBI87/DISfMGsL6\n3bz3kj8r8JsK2YKUOfJ6/Z9gVNtnoKtx8j6x9uQrfWYfHVHeUZVgwcLmeCSH\nLpwczAf7QIjZkK6Cquy/LhxSj1MeBkxU3yqUe4kiM+UUfyB1SibqJOKDcfVc\ndFhM/f6SITg9HmKSmJC16F9LLjulqns8GoNI1586o0uOEG30pvA6zcn5Twmg\n2OpM3c04GJyRjRlR/jkcts/m5nIhHGVEYqVNuCoFhhmFjrqIorICFQa80gMc\nlAZLkL7QDqfF/19mLRKwg/kJEMtBIsrG46Jri6zo0Q80Zge7dpQ0qOKgChTI\nrudkzaDtjcKNoDNuvu0hC+jpjq28J3bZ7wa/STql0U/8kErDlqYcOtWHPE1P\nqGMlmkCVs014xacOqxmLGpoT5DG0AOieOgWRqQCiwZqM2fVTztHB2eBIHXcR\nHVy2obkn7qAUlDeno5eHfGTP4Oi/J4eWltf7Rcba8xMqRMhRRKJwB+rqHYtx\ndbwTdkBNvLK4gy7t5mRtuoneiomz+v4Mc2QqUu5tGEpZQGN6fSRGEQ3TiQP5\nkM+ClEb0L3adC+aVntGhZaTRCiNuAgHIFIC9dRc1hqWNEeEmLQoUvlIMGn5O\n2Rfx\r\n=WnKC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEHdS8nCORrsDIxfh2kCLxfLyNAKHPT/Lp4ghabt57KZAiBK5+8WHyzP7Z1h4bvv4812ThXKUE0hABpGxqK/wddMkw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.32_1572297998222_0.5580939489806689"},"_hasShrinkwrap":false},"0.7.33":{"name":"@react-ssr/core","version":"0.7.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"05ed8b6a6f97cbeabd8bd96282ee83efa5046d78","_id":"@react-ssr/core@0.7.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-S6DoQybKjQfVhRiedUbuzYyl/H6ZBGokbKEyuPfmYDJJbd0B3kamXrmZHy6GwDnFfVT46DI0673pnpR0Sul1ig==","shasum":"cba05ba952ad1a7bdd39a6b43839007eb41e45cd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.33.tgz","fileCount":23,"unpackedSize":45140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt14eCRA9TVsSAnZWagAA/ykP/ity6wlBHkKcWoB/DE1K\nYxsOVkrgwfamKWsWclPM/uco14wUyN7wgII1sX8ZSZ5ocWG0A3r+rOLOhd9O\nNvqlK6RqmlGyBlWflLijj5X4JWwONL2NPC1vSVr96U8z74dVyFxIygQqP/ch\nQyRmvIb2pMMJEv/zJIVqaUh1+wpOF85sbVZ4b825DTcAqXyV3wpmy3I0zTDr\nXcHJDeMeP/bOzmalzn1py5nKgfXJNO3WqejK8riEj18SkT2vLWVw90w9boTY\nwbjk9uKRwCjovw82OzKmIX3mpDIUOvmrfrU5GDzzTWhKd4kg+4IQXD/+Hm1Z\nAhpfMeiC/FT9LhakjkIuL+rjaME601l/Q/0aWfN8ELm6TU27kRvUy0m7agm/\nqzqlMJIWUk1CNneBlkyn35h8oi03QMBEoMYYArEaLCcKWZIHkdYqT2JrRY6T\nitQuCV3NSaWh8ijq4I1MlxpzFroNJ2Jz9tIT4uBG4dvohIGF1Caxm09TDnU3\nkmnz+qjQBA+JZ17uXj0+4rFjacAoKNXksSu129nXa/bww+D7Rj8oAn2lHr3n\nApQc0OJbrb53VUf2jfsH3A5V/MAvMavTnKwEiEkRK16+6FO/N54etZ5LDbQf\nPKZ1M0HR0NzIcQCnu79hMnUaVg60d73sUAmcnJaj9CZ8JTZ5CR9ayYewiuSw\nZyUi\r\n=zXe4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNsqSoLs31CkDlBssz7DEaimk1iORG0UaTk/AejtH0lAIgHefllfF1esHv/nfyTbv4EBxZYaS9oI1VfRURS1qhEik="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.33_1572298270060_0.873864595252738"},"_hasShrinkwrap":false},"0.7.34":{"name":"@react-ssr/core","version":"0.7.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d96aca51627b8d61c093aee09d9a8719912631f3","_id":"@react-ssr/core@0.7.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-v067CuWyLZSmlSGMGPOXqtGgB9NQFHntdLYLCaENOddXScxHdN2RrSOyxlB8825jbzq+kOXct+d9lGkkBitzgQ==","shasum":"290749709073a372cf29e871803791c46fed4b59","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.34.tgz","fileCount":23,"unpackedSize":45107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt16xCRA9TVsSAnZWagAA83AP/ilM6iHn1eVwL2XKyg+D\nI10lZa0HEyC9moGXpcgwmjKojfaGUP2oMRIv4OrMccQB/e7X7KF6sxgrI+13\nqolWr4SsrAuH2ZKHayME1KboLmwLmQe9ydxsb9Aj2Ghg30Tr0Ytb757rzgzm\nzeJ+tGg0h6pvUgB/YAqGRHpXvOjMK//mQepo4lD+XpX1cQC5rs+1zEKvT+PS\nSuumEfuVAjaSNLDkLVCNqJnrsSBmnI1O5HzOQEO1aGwt+YoK+Ue0pR3BIhnu\nVOBub4ae+P6/pRGYCl8wfQeAQOzGpvaPtQKWJcMM1kcZ+ziyx6+0X2JTYp24\nMqdR30/oGzNm4F0U/E08ow0sqVs6HvvADK3bIW+/NOasRgcDy+5D2jKp7ETt\nKI+wejgmYSzTTVGJPttvm6cBt2dALa5r4rgQMxM5/3fus3pZbT75m/fBH5Sg\np9yTjkqZvbS04Kr9E7mUpI1EF3LSLjX7JD010FuDs0TMFGU29UcQNO16JOm4\nzDFnILSThwZW4ZTFZYxSu8D5bpa5g2O2zMDNfigcEkT24Ia4a7N+RCOMV1uY\nOFVmWkxbKbuIatnzRbVBABr+i99/ZMnHD103R1TxAL9zIm+YAtkTlMgxYQQl\naL1d6NHSxZ4g/tsONpQcofipkaoJcDTDuaXyKNY9/OtyCgqC743DIlarndKF\n02is\r\n=WpoA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt+zyCUBCsu53iUCSRc4J5WOzfTYwIdPPzS32uWtv+xQIgejGhGT4C1LyDFs/hB8X2XPGJcJ3+meN93JpV8GVh3fE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.34_1572298417286_0.43109879937520934"},"_hasShrinkwrap":false},"0.7.35":{"name":"@react-ssr/core","version":"0.7.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"af0070683f351231760f97ab3215047b0b66c57b","_id":"@react-ssr/core@0.7.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-r8FZPzpxf15NuVsTYo0TT5yOnYvFrJSK0/dvKhSJeZEJKVmB4Ga108XPBUxfOdIdRBhpobBjl9gkFNa4qvmhug==","shasum":"0b97c3bae4f000a8950245f73f1bb8d55b3abe2d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.35.tgz","fileCount":23,"unpackedSize":45175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt19MCRA9TVsSAnZWagAAR24P/1Gqp7rDKQFw5cbIIC4X\na7IEudY6fbHLq5ZZMSiXO0cXW2Dtqml7EngxTqswGRG1Ft+d9KvKVMfndhLh\n4MKagZfQEmyihvgpBLuS+UY+RMXaYzB7vhhMuGEdLdCMpEApDaovxlkSGYpQ\nqr8zLSOlZAFfcNyEOU+taTGTE0fuSr95bQOcV/uyJK6K3oviagcqVIVBinX0\nKqkGDmDRqkRssC4EppggICmdeqB8t3B1T6TnvT/Aru1Fre0LJGQ3s6iXG4IF\nvKMd677ttMIOL5ckflNlGwMLEuYYCXEO45RTttJ2hhgokfDemfN/OI1Ep7a+\nFfysi5mKT18y44uE+LdqCFE0e7sgMsCf0plKCxvhOTRpStRaDC1NMXrfeLdb\nZtjehAPoE2DrYECFE18JERrtGPo/PreEldcPvVlYQeCzH8IlGDr+vLR8QuSP\niKeLm+TSBtYlQIxmcvjIRi8knu+JM9qKsw+bgLhQiZd3Tdla0pNrL+AUryxf\n+EaLajMoDGI5hi/CfjfBl8JyPuD+6HCJRmUG3Cq4kvzUh6q/KC4fhYkMJqc8\nxrVr5dCjyzbu88TUX1XGokkFSwJhfJvdlkGDVc/UdwKqCNw++i5z1kkhCDke\neIbBazRVPiW0sdmFRL10EC1TF4ZGbu13cd0ta64d8eufcMKPVe6wO5b3y8HP\n5blr\r\n=Pd9a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+NPYueNGa0TAdPRnwM+6pdbRVrC2UnjeoT2ZvoW5bqQIhAKdMORwt62f/E5V77hgwvAw1z6DqAyp1qNyKvtuIgCWO"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.35_1572298572152_0.5501106796960655"},"_hasShrinkwrap":false},"0.7.36":{"name":"@react-ssr/core","version":"0.7.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"80a93d8ebe9b35eab8560aad033bf1b79abdb0bd","_id":"@react-ssr/core@0.7.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sRle7Kn18NeCuel7oo5hzr1sujcjA5xAuZoIv1Y7cUKXM6Dpx5QqQxitbp/A0MhzUHLzimTzn+JBpJvZb44vjw==","shasum":"c216265753035220e1526f071a8eb889d0e4d78e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.36.tgz","fileCount":23,"unpackedSize":45022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt1/cCRA9TVsSAnZWagAAsRcP/iC1wHVryuZtNjvB5dpt\nc8LAt6b6I9VdOpUHf1OcdzHY+tt7itotMTyaHevnXkwwlRA4EKe0wA7VTj0W\nntGCmA4rtQ06OmEQ+FY9mu+maw8T1oKAkLrXcK1Qn00/m4sbkMtIvbWMmPsZ\n8tTKDRhKTWoT4ApC0ZwuSAZJDYbEg00TVhvNB8ZRMjKJf6peuEI9HqdV6wWc\naREoTDTB5r7BNCGJJJGYyitEVLCmrDXWlPfgKBkUoHwLM6K8saeOMozLsDsY\nC0msVp6bI1/D2GMIQRJhOOKUyGQsBvCM06T5qn8KIGpQQJrxcrk5uYOVYIaf\nj3jReRotBY8w50dI/8IFYpiFMlb9Otya6GosoTp13CFCoN/O2T5PgeelDEHe\n50ugoH5q5dHnxddDkHq6IIIUY0pS8QNcyl2VnnidANpRnHr7BoFUvTqLaMnF\nqN7JbwYRQ8vYgk97ziMKCSuhGObpBo8lOXEbl0iA/v8+GNvYGoaKhgo+HfUs\nDWBVmtlbqGvMsGWAHbBAxHodq2Ns9efQcDOPjcB43f7TpARGB+FZGNdO1Rcu\nFWd2kpTCOtsVF7MddiHdOKN8sQQUFAfdRAOu2b3u2OlivVPpTA+33rKppd0f\nacmuJPth4NevwDrS5/Kg0imjP0t0ikymWuzK+g3KkcOxO9AV/cZVirgN7PQS\nGpt3\r\n=JyyT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1BOEZm21dSryxBUk7Jf/0rzQTNPADlCiqZXrXZqgMkAiEA8h6HHRYfMTA+otg3TQ8pUdf/DUoco8i82PJ5IYbLgUs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.36_1572298716091_0.3420767535987117"},"_hasShrinkwrap":false},"0.7.37":{"name":"@react-ssr/core","version":"0.7.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"15612ed4542dbe0da81c725048fa9d6e71120e5c","_id":"@react-ssr/core@0.7.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BMvnJxr4xKyn4p99iBI33Sxg6W5Jei9V4lnLLZOMQvyUdiJ1p9bdBrgY2WucmLtx6VL2PZtue4dreIFhP1KJpA==","shasum":"8a418b445e70aa851533e96ce6ff90fbfc042764","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.37.tgz","fileCount":23,"unpackedSize":45061,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2CFCRA9TVsSAnZWagAAvCoP/jVaDrOujPgcT/OFYSHw\noq2IjPa9WnJiNuCRXRp17rI2chzshUY9PRQ+NGenST0or2ajcZKgLgd9r6Ch\nvLUn3O4pM3Y3mckOLKVDYgCMEu0rk5lueFp0hWkfxbB9jfUVuWIELBm21Pff\nT2jx3PDj2DetvPDiU2aZoDOXXaUWj4fqFPAb3sLXOjjxT3XbnqGIqxqlwaEc\n1NBEAofe61RW/HIOERL0EUoSh8E5tu058PG0uQOQuor1L1sS4wbWWvsXXINq\nP2AQwGVCwpr8sJ7n1Qd30sZRyESjbWmcJHkPrf9/GVbXefdLmNhbP0tHq1mo\naIzHvUSS93+QLbCp3cF15a4WMutJOGtx/DpzM+IUa4m4V318hKG++TfWDvDy\nYBCqeLxwsvWMfKZwqtrh/241OKsKHTlI+9DbqYnTz0ZlR/LKQSHX2ULn0IHg\njJWlNEYQy+1VNpj+sYj52vZU9PLOe/Pmz45SCpCYZ+xlSoxu0KeGS1UiktRr\nyjtl4oFCt9AzSrOSsuV1yRxK+cGKykCYBv3kLbZmMhQE2klz4jJy2BYy4wiD\nsRfXgQE38IsfA2VbpI2G+3UmcGoVndZQN9VOlQhSVu5ihaaT1vCoCqOouVmz\nXhllSpwTXqejp5LLRglvO9kDzVFHsZ3EQ1E+Jerd7rNVwnXJHpx4mxPd7ZQV\npk5/\r\n=pG2T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGRVy1FV+0kbpEc8uUjQ0bhG8518pL1oChCRl8gvJEOAIhAKc2aFW3TpJjM3inyybaYEskaEFQqc+prnXwiFxgeCOL"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.37_1572298885307_0.024103092344851973"},"_hasShrinkwrap":false},"0.7.38":{"name":"@react-ssr/core","version":"0.7.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e8a38501a1c21eaf84053e1de02677f2524334cf","_id":"@react-ssr/core@0.7.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sogvElyBpQrpUtsxLi4NxJjDYfjJvRMxVqXoEsQg+Zuz6tyQ6cKwy5A3iA8jygjdGROD9qe8zRisUyxIIfncQQ==","shasum":"a12871b6277b0a59c6cc158bfe016f3b20f2b882","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.38.tgz","fileCount":23,"unpackedSize":45096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2FtCRA9TVsSAnZWagAAnC0P/AsCbnWF0uzFcvMBvuGJ\nqtjjc6EuLJIcCmq2I55aqukx0qWp4KR2bahoG0ggFISY714wwsaj0rzL2F2l\nhMR3+o0qkb2RWbIT89+FishrMaf+C8WL895ZC/d4SRfWqzQ9DxHuHkglrNok\nwFqL0/WonOn3GtzVcNZJWXy9Y+RIHt5vDHmwO6Wp7BF722syeGu8/KaV49l2\ngMCW08gI4jCnpkJP5xpzWIoitlYeGmZe/4jCsaRPZXgI4FSbuJ2ydmp3832G\n6wBO9rVvts5x1lLmTkTXwpUxEVFvVoJ1BmJQy3e64nkFayvrTYwYPpziq/X7\nHeJs4AdZQABt+mlof8JLPaTcHt933CIyBtex7qEgsDYnX9yK+bWF1D0I0o5y\nEOuwBmigL4+Jjg63NdIW1n8DjxIh4LAKYfJE8zOu5FIoXIMVigXnOFEzk1g6\nKd+mOOQtx82QKzUtU3W8xCk2radnD7sMgSyoGY5n60F2NO7TkengfzVqKUHw\nwosYMt93JE0YRRYSM5IG6joLNIbkBG7bFreVKsBmX0Obo4DnK8e2w0P58HEt\nSpw8ApSbZEZWc9bLbx74GDDdOO9yK7zFUcUycZAjiePv4M15bhD9ECO4i46n\ndulS5DT0pgUIzCNTBsB2ElGT1+CgurKARSjnDrfNslhcQ27+nZWSbdiMrE/a\nh29a\r\n=JVME\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeWXDkDwuI3vrhNluxPsb8yIcqLjRJdQIfDNat+6ogSAiAK9cXaB82eBXdC8xLLnI0mjMFhIfz4FVLiCxJZceVBQg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.38_1572299117170_0.7767535344860681"},"_hasShrinkwrap":false},"0.7.39":{"name":"@react-ssr/core","version":"0.7.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4a1d0f9b16e58f3e4d954102a2422d0106874530","_id":"@react-ssr/core@0.7.39","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Vbmzw6daRJInLT1o+rJKTzFGBcGQkLJ15Lnf2Oz9/7oPMGDOjF7yhNzLR06wWaIlL0laLjzsS4DHApoX5tNAgQ==","shasum":"0d41a79d20b68759837b32f391064d27babd29c7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.39.tgz","fileCount":23,"unpackedSize":45213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2MYCRA9TVsSAnZWagAAteMQAJ6gohI15DZz8JsO01K5\np4RrNM4dvvZjbm07rd0As60Oxcxq7DP+hvTcQZUd/InEmNXcvQ8qSA348tSX\nDPgK1wH+EMXmS22gC/oxQC3ABoZmv6OmpRY1wjxYRfDgmIxGANXy1e8c8btk\nn05/Qi3Qe1MVtmv/OThbaOVWCeQXozCjOZL62uSl3iGgPvXrK/K98+igCUGK\no1uUp5ovgKrQtBnUEBdM4nX67ZqvQRw+HvBBiHxFiVYUqpAZZQPyo2kCqTsa\nnXNHVJkkajnyzi2S+kJHtMWTHkU/nZTfTwsnzb7FvJ068Ta0rh59fq7y+R1X\n5YzRg/nJisb3tSaYXGR9wkh9yqszNI1NOyDn4gnhvdTovIsVt/KCvPuFK/uv\nbX7np3j1JOKJhIy37FfGfA/iSKzk3gxxR76YPauqLrGwcVULki/qSOwnqxqd\nJ5r1e4IpgiIKOIuftbOAU3KXV+Nv3Cl1Z+N+Z1MTkS0SPQtjkwWmqRLX8uKe\nkSqG0PVZCFGoVecd5EZGTdlLKqqTmN1GEQKjc0Nq6sg7OhM9AlVpPNzyYpGN\nrDSriEO6uF25RhGEKt0m62sz5E6a3BrIX8GcIxYgnnUmAFUiWM+bgCbrSNsT\nR+Pi9t8sBppFgf6tkUxqKAdr4ll5ky/B2fJnEqOb2BtdvqjoX6y2tksJkPHj\n4P24\r\n=3EXH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDI4vCrfF2nk3HZzAdHgyPMDX87ryE/dXrJV4h1nWk9tgIgO8rYbXED6ouqnpu//fOQ01ogIGtOqWhJuHhhsm8sxo8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.39_1572299543744_0.13187163705299065"},"_hasShrinkwrap":false},"0.7.40":{"name":"@react-ssr/core","version":"0.7.40","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f3e40244cff7ae1b5bfefbe51b0aa3dfc6203fa0","_id":"@react-ssr/core@0.7.40","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XQ0qrtiDNAkso1mAIXhKetot+kKTDXIQIcDhVQC+THW+wZsmEX17ToqaoY0deoICLx+BmLP9ia0Q38Lw1ZBMxg==","shasum":"296691cc82fc4491a90825e322aba40f38abc31b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.40.tgz","fileCount":23,"unpackedSize":45381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2OyCRA9TVsSAnZWagAA+J4P/j4VTzNN5GJfyh0/LmLY\nk2POGGXThC0UNPc5T8t25hOVfsSb7Z7Us3qM7Q3AcjmSW4vpVS5/FxFcgTO8\nOtahgUkHekylu4kkE1xkrqsSTsblMQmYAQ2WCSGta8b0RA36Kw6DuXimKAjZ\nYNCX6ckXM/JtnNEOYhPwuylWYJGRBbARvs/4k59nHbJicBDCTBF1I1CBOix5\nlWxa44pve61FRR1Y3zy+3vOYlJbb/dFvp9hTCekWpRJSGGNlVEsHnRlm0y44\nULO1YNN6qYWZju24kWaYHySF5TTIz2kGFLbs0CnL88QcX6CUaKeiT046pm14\nCQYA8jh6GAahreBAjuQ/JRYuV5/L2cyLc+04nD+r6az4+fe38Pl3L0fxIaQM\nH5lMEz2eGalaqMQp9UinencsSnvtbrCS7K81k9x8sEnQ9dXMZjX3Fo8At9wk\ncjcwDrbl4TfrKovU8i6fOedvfeQecyz2QPP9wUfRfwekgP0CB8Vy6n7k3jac\nrHm4QSAOJ/y0DfOwFQ+YBlAn4ouldgKTBY114skE7cfCLCn9dpBwH11nLMmI\nBn9r1Y5DShGVYVs1PG3VsRgoNteZEdSO6y3h/zCmBfBYumFL0mZznEkwVnUj\nVvGUJ//aBVrV/cW9XvUM/uVPYfN3cLl8u5+iwsQ0CEHGtR1LcsnndqQBm7Dy\nH/Pl\r\n=3Xnz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJOOys6fXuI0XpOeu731phdt32BdHvkTFo/eSL4fnZwAiEAuJA9PAPXZ7uavClWCnadShh2Pi/SyJwHvZmaAobAEXQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.40_1572299698551_0.13762192639643778"},"_hasShrinkwrap":false},"0.7.41":{"name":"@react-ssr/core","version":"0.7.41","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6b6e43de78b3e3a1be7f1f57e80038f330c9a64c","_id":"@react-ssr/core@0.7.41","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Q5VM1XSSQplnBterGWI0uq/Z67kiPvB8VSmMEpo324eCZahbmMgrRMqtSYH9EvsMVUAgwC+5Fv6gk4Y8JNcbYA==","shasum":"99d1497298de4ce89b108c99f28de9554f93fe0c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.41.tgz","fileCount":23,"unpackedSize":45336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2mGCRA9TVsSAnZWagAA6AEP/j2ODx1u3fvKrl4Fen6a\nhwKU1slO1pVgp3mQABuvNF6X39U855WFEmrPH4Vjbie+uPofIeEWskufngKE\nuVQmMwUboFWhVvFfCUMyYN9kEtc7mvQuLeP2owS6eg37ltAww9AIwhMPrWw6\n2LxZ4Fc0nRjNtB8oJcla3cJLoS9mOf75w2LDStAervbHJ62HI9YlkFt4moMO\n1sP7IsEjM0q10pGavxlo3FqSRawUAVXxz4pLr9l6QegrDmX8m/LUI4IH6cQI\nM89Z6FA/i5DyeC7OSbWoyUvHdGHUHNwexM3QBtm4dIEcKvnchBUszDhV/CoO\nQAnb/d+bEIyQp2FozGjhx7LvPiIDMKvUJUFJeNZE6Wzl2aDUeRd9/o4sh4Z0\nGixI4F5EidpZcZPyzAA/6K5yO+F5s1dBV8D2Vp+Wtc/HswIfJTgE1YjbWely\nQRILrPK1Aas995b11AmtWRonjG/+Ce4AkCXOuiCd+bCmVCPIZ1qcc3r7zdpP\njEJLmMC+EgFtT7LTs5GbLTv0IiiBH0iUpb4PF/8Zlrm6jOYjWjmCjkNZbtBz\neM5teGs+bjJuFpjT1ovY8NdsFzMtOXG3f0wftNrCs3b4ze4zB0IN9sRB2CEe\nzKT+6Wa7B+90BHWOq2CYvwa3VBI6m++Oy7KKimcZUvZygg3FdC9lrm9DGv9I\ncqM9\r\n=hhef\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsLHSUvKZ/MzN9GbW8ty013/ULYTv3RlN5s2RsqcrPBQIhANJoSNUJrwBENDoQnDmA23CWzcyEzffKTk5N/1nLJUR/"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.41_1572301189781_0.548838141145759"},"_hasShrinkwrap":false},"0.7.42":{"name":"@react-ssr/core","version":"0.7.42","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"07c5fe9ab2b9bec0b030ffcacec506558807c25a","_id":"@react-ssr/core@0.7.42","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-coHFDGcwC0Cil2MnUIxhuJicg9JrUOgzExIz6oMJNCYigpN2y62Pg19iaZjZzuoFFvRlmmNHOpMmzfOUmYcNjg==","shasum":"1361d355ce3901e34b58ac4bfaf76a432149edd6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.42.tgz","fileCount":23,"unpackedSize":45145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2zFCRA9TVsSAnZWagAAgK0P/3r8CDgsgReFc4Ji4rdR\ndBpWn0Mt/JgAKgGPu1Ghy40Pdfq4IWmrdPZyBaxJo0MH0HWXgXe2XZlDUit+\nnIaybUdtrSbj/HfAH3oWRhKMkpTgK3sRsKqCsWz6cUcZgdTZI6l4jtUdgPxu\nOToGV7yqGjg8otjdYdyfn2XolBcZWjJng8KI5QIEarbzP3q52/90u9YGk50e\niuYgO+NgWF55vaJ/IoA/ivKKbfO+OiUIG2Fjl2mUFN8BRcwx/Sxa0kVqoKs9\nKnp04kqGvNI0n1VwXg6fYQnaP8XWiLPILp6Ul0gLZ05sX7GlAf7K6ZNkP8Va\n3bunlAEerVAFGQb3sSNJi4GMLjcsQItDfBdF+JputSgaypDCYXnme3U1ULYN\numPNikaLwC+8iyVq7ZZaYrLeYhsZbiIJU0zCk+tAD03P8oX55taH+AIvgsBa\n0NxxkTmrRypIDQvkAvZoHdc2gndpQhqGUcnAgAntEMC5snduYLAKoNvkTHjZ\nJoLmJxxs3FR4jDIBhCMdHzo+2H2RblN+IQkwjylNatnRppyhzgQDABaEc4Wv\nNsiBE26fbaXTceMUyjqZO6B+hgEpE8bryr9oJdUIJwnQCzJHHl82Ht+5MUvF\nt6Q8Z3srtqhct8hyIEcrD66dJtRZOhluCJfGhqyid8q/rJ5GFd+sYRQvvJQ2\n5YJN\r\n=fdwC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuA2rsyNlh0s+JB8T4IVTHjfe52p5Ft7p1DpWgM6BTtgIgLAbu4kTj26rBLEGI/sd72UTowWeKX01EDvWbtx68COI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.42_1572302021094_0.2815596188614924"},"_hasShrinkwrap":false},"0.7.43":{"name":"@react-ssr/core","version":"0.7.43","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ea1834295f269ac692eee43966d3a13d2d4a19b1","_id":"@react-ssr/core@0.7.43","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VSoqiIeS37QNKDk2YG6EyzsMWkIqGipqr3RbhG1Wroi+eoHb558Rc0aQROPOTaxMpHeg18KtrbM1F3My48/6JA==","shasum":"ebea5ed6a6ecf27e72118982a816dc5a181d2607","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.43.tgz","fileCount":23,"unpackedSize":45223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt26NCRA9TVsSAnZWagAAUOYP/1WgnJiAwMAKrjMKS86V\nxXrJpf3bpqOqQlCZW2zupT3XgZX0zcZ1DVFbl2I9w51862mWbccK29YvoQUU\n8IaOeo6YQUrJD2AOKYUXlz2ntJWSThF6swYgTB75P/zXep9N7FLQbZ5/1dFr\nvMVn0F5EhBHD4P3/FwmbTetbjBO8Z9GyZWDjPlrKnpARDQhu792ZvTZxG8sl\nh0KbhI8XH+RfInOcnr1t9UTtPkSLeT+k26B7Zq1kcgK8fed+fxpDDB25IFjc\nYCP3ForeR18ng1nlktYfMB8XobzHkX+i0zY7ta+YLhYqKkxeicuh9LD8z207\ng53v2XkhgkeAWnfMPQIqaZ4uuFuUGpN5K1vO2VoRSs4ap3bOxoeNEIdKNXsF\nMGVzJyhVgtDuLcFlMRpIyDzmhblXmvHDAMD1sApxXZb0E1tVy5Ie6Icw2vUG\nyCIE4SOHDrAhgahqiDYMy+kPls0K9+cU2t12Ub/Rke8qZzYYp012rCiOE/Ae\nmxvhBI7/QaVG0LzE8WozaTlozhyyvhqArCwqPSMHrJhK+Of9Gz50lOt6lx3Q\nBJE/Jyxii/ia7e+cW1jXkGyLWYmJEhX/DwnZ9QTPHjQPZPjr6Hzizvrb0GNp\noDLJQPOEipn6hRj1PQFllOE+dTfUWWpdw4XwngTWtTthGg9gqe2hz4kvCXab\nmFE6\r\n=Za8y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYAfLgRHlfg2p0i0ltBmax2xelgZgZMYCxdy+Bbo1B/AiEA4N/e0zn5BvwD/ig3HXRkv77wdCb65EtnA9ct538W4gI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.43_1572302476560_0.2709646344825549"},"_hasShrinkwrap":false},"0.7.44":{"name":"@react-ssr/core","version":"0.7.44","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"af2cffc65933256152d439959827d4d46ddae2ef","_id":"@react-ssr/core@0.7.44","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-w236Yh2iR20A+y7mB7X6lI+Mm4/bxNKVgg5eX4n/zsRFVAYrZEuLGDtDIIb5DCQjyH4KGJ/+F83hEK1a08p3nw==","shasum":"305fe9fe59fcd3f6f8e197f28c1e44784f15899f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.44.tgz","fileCount":23,"unpackedSize":45382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2/uCRA9TVsSAnZWagAAXTIP/2ARFLDDG6o0uWiiOaVB\n1dnZU1u0KeaLKP1eGKlN+SE9g26GN/hNv6QAg/zG8kIfVqTX49ua+PEqvJs4\n+Gi4ahb0Ail8UtqPf4qDfCli4G2zi2Jdgm/+FgsfoqZpHmbERBOZA+LmwCfP\nzPE9IVjvBG3IpVXaMUeaQ3x4CQrpA9x8UqEIee2QWo2ocKv0Jf3P/VSLWkpf\nS03vp6o0ZcTROpTuMnRdrYK5WRp+y909EeCAJRGiSIprlbKt8qHZCq5NbTgy\nKXmhNanCzr7+6DQLV3BH5cx6DLE8GNsAQi+hI1HqHuZOijWNTSch3KmDoIqg\nyhkGfzjztLtPC/Y0PBZxGn7t9tEshdijI3RbhLuavmQZqtmJulZMFpQu+xUa\nbF8rdq+zt9L6NAVCoecgy63y/ZioXa5mURy4k2z7Uh+TGy8Lh5Fbr3SCjKVZ\nQ8T8OGOhXxjJAjVPrNrnuIk7zWpJ958kRIUe4G4Rm3trTIJgwcgJdCr/BfIb\nzyQl3LMg/2fpSElCA4rQoUDewxOPCitola1/RMMRDaRpVuOr9/uxPX5r9HGb\n21zL5+Aex++5cpE+IklVf0KBi3S0GHrUGvBo8aafC56xtmHV7gbnHh2PFErs\nUVJQUEQSrKOcBjmt/iMLGmw2Dfs+TEQtKXYQDZIdOw0qlL+0d1LYRHZJTAMy\nTpr3\r\n=dcdL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaHBAff1BXXTkfz+CrrLK8SJ1BZKQigNDm80kNBLjvCwIgUAkEPLBpZq7iE7VHqNsvztBXLH4pFlf5kTDARuW7Zz8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.44_1572302829499_0.06085400213389347"},"_hasShrinkwrap":false},"0.7.45":{"name":"@react-ssr/core","version":"0.7.45","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"30928992b43b55621e34aa104486ea79a48de6fc","_id":"@react-ssr/core@0.7.45","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-u4YmqTgBrgTF/YNCaiZdoIe+Bow5XKLWocvdZsEAE+G3HCGKk4yIXcvDS0+yqTIvIslfYZ+nliuqT0mCTW0BxQ==","shasum":"ac232b5ff5e611c4accc1a4fdf1113aed3ea42da","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.45.tgz","fileCount":23,"unpackedSize":45386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3BdCRA9TVsSAnZWagAAWNsQAJ8iYxukmKhS+8Q6STJ7\nppM4lmN5IKDq4M+JhMR93DeRE0XNOJMglaVW7Ev9vfanQfn2COzmxqTP6s3N\nySKwwW/K03KQJ97ILISgCQIXuTGFbD18cIvYj4XCPsVlzhuvkGPTDGVG/mtL\nVk4siSvJcuZgZ3UMMGFz2LhLNhYMfiI3lxjcmRvrDeMHbRS/GBmCxEafUGT5\nNVJaS9F+wdRXj5m2hI/FCxARs2OmH8wIFnhv7JSEMQU8gUmfZM8ylsa/qLVO\n+dLkyq5rR9Do4VhGC4mLvuz4c+Udd/kWrz3XiILNixowjeMBJs+Dsv2PRMGx\nujuXTuwxNFwWu9NHHvWOUe2ZZ43xkg43oa9zDzf9kYs7Dez4MB+zNUVzoat+\nQq3XdIbbcGg/wDeZ+9pJyP9f7Fo5byvWswo4pa97eZ3LJ57vzr6gSFhZ6gdS\nCA9DiW6KGltYoa1dK4UmqG+IUNhkmeWJdwYyQOoOKogp3zdFKf/WsQU2xNP9\nHcW5XuCJjCMaCS+ZgEngCoKNdhvNC1rX9zOBQ8vvp++Ibo9JRLDB/6wKKKBX\nSNs6NHEL/xSxMQ8xC8RRabHsJCXvxNHD/3p+gXvHHd7QktLjACbGyf710bz5\n7MHnKc5QZfW4BaEMj75RZG+g4kTiHPI5jOejifW/VFLLKMrx+CBoIRdS6z+i\n1wle\r\n=dYeX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHz4WYKH8oUauyXWwUhhzg1/hY9sKQSd7JUOI18bUCfAiEAst2VnK553YxwlYAbrQ1D5IZS8MU5zKt9hH5SGdMx99c="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.45_1572302941008_0.2723946102810475"},"_hasShrinkwrap":false},"0.7.46":{"name":"@react-ssr/core","version":"0.7.46","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f5034bb83d4dd5386cbd3e9dbc6e5468c20714e8","_id":"@react-ssr/core@0.7.46","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-rHehfXR29k8OV2qm8SSCTbmcZw0bDSK8gAin26xHdYyssuYQx1H5yfj1fQ5Py9s608vadiOzdpJK5mbxBEfqpw==","shasum":"fbb6e7afff5537f6652b001173f00b16ddc4cc24","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.46.tgz","fileCount":23,"unpackedSize":45443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3DtCRA9TVsSAnZWagAA5EYP/RQltoHbkImdRXt0299x\nWa13F7VjTIt0lBmgy2p8lL31/OZ8hNpt/8MRDI4aDWtztMLdiTXFvTRO2h+G\nEsWcMjie7VnSbEYQEYFJQuUNjNJL6Yuobmld/nvkkDltkK9qJ02UFIuQUlis\nhHR5hlhd+r8UiIsvwSn3d49kQMc4A/l0+33rdposxG97/73QYQ0sd/Kd8UL0\ntggyRw9e6+QxvAwSBKsYfq9EXtRayiG7/L6D3vSJDgz8IqzxTNO1VxuvpH5f\nkRyAhIjCD4vJm6Ibr50udi+5bBYUiSvuPBZg17NVBJi6O0YkAeiDSywqeJ6H\nk3zckNVFhyyPzd6Mm6myxpmnkySoyCW95QH4fKIm8Bm1OieBGOm7hDr3Pfrr\nRwvRLcxew5lfBsBO321SrIMd6mXJu6SmCWRB0uPwyoxIaz2bkMptBt/6PkuL\nsN3gl3jSVu05HdnhL5yDj+uD2vyx+Uy79ve29ZD5SbggHM0e/PIFNGkzeDzs\nikXR5XlJLMTsmSeBpV9gQA/WLP8p7n59YJEbZsxO8tcFUvtdYDVW9Dtvbqfa\nwn/zpTs2ol2ttykzSSi7Tku24m4UypkOkjGadEf6gOQmPhPR3OCfmqDJfh2K\nUNuSImyilt/RxbRQObmpgbIvgkgd4ZvEx3Zvg+unfsGUYW8r2uefIWKac9pN\nMGrN\r\n=Iw4a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6tOjayGfrTIfLbElPhF4YUkak8ZIG0EEEGzmZ7ek6/AiEApIoRx7WXrrm1mfsexjvr/Mjg808HyDpJAxiynqHHjlQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.46_1572303085306_0.4707418788975706"},"_hasShrinkwrap":false},"0.7.47":{"name":"@react-ssr/core","version":"0.7.47","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"45404820a449751589848c4d4df48bff67d462cf","_id":"@react-ssr/core@0.7.47","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9OFa4IpBOmDT045XQA7wrWeKOur0bocV+4u0K1CQf7WRrDFBIIqEaT98MGLH8Tyi4NERkGVlqDiJyy3/c4Okvg==","shasum":"20437f5a10e17aa392c885f239db795bcd9af26f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.47.tgz","fileCount":23,"unpackedSize":45390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3I1CRA9TVsSAnZWagAAe0MP/32WliEIvQtxQ3jRYjWw\nHQrBglbg2p5MbkR4/ROQeG967svtJklYpfgIwf9L326nFW+vfFe/m8Gzcdpm\ncgHEt9W7wrgn1K8gBz2szfxUGhJW+lHLk1es8whZFvDeOWII+ZsaO/2oR50x\nVLPQJp2vwINMzRbzAMSQfEK2iyydfq2kq9DVBLHhPVt5y7Lteq8Em7KB+EOa\nZjqjHAvSANJjcHuzp4wT/y9RNBD0b37ncapkSD26iI+3OT2lP+2RtR7zC+Df\nw4GhVkPH2lFa46WxLgp+aj4r+1xMCuSCWyxBxLXs49x10mbVu1EM4ri8wHjS\nMf+PxvWVx+y7FDJhatjL3/iG3OzuvhngdwJg3U9HNXaGIF2QQeF0J+qNBbeJ\nCj0bFGIiv4tNEqjiytxdUy2HwhUyeiiFcYGE+DjY0X6nvgYxcsFKH7eFkkcJ\nL4r/f7ATQP/T7qhb3AHjVErUQ6wETt2CNE/fkw3ky9HlmLRIO/K+AvVpOcUe\nwcL4ot/9VIAIgbBeSenYCr9tlGMOe/AeIgaXrGdVw9fJFEcbd+r43qaNqAhs\nHJ8Uj+W9OvnjSp9b6IT4rRQOW4EtTlcATYlBV28ArIGuTZDv8LWs4lvUbkOu\nk50Ste8gsYny/CWUIZdSE+hE/2HhjcCO0I96CPr/CIaiteXiBrKbM/5y1M4U\nZBDN\r\n=dqSg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICz4g7pl05y+rZpDcLFU9V6YbJatFsdLwlwmaOmdztzlAiB5q5Kvi5pp83vRw745rdcfI+CWBilPdjkqX1fPukHEyQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.47_1572303413208_0.7398650352665599"},"_hasShrinkwrap":false},"0.7.48":{"name":"@react-ssr/core","version":"0.7.48","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e3a04981cd4c372ba8949a086a9637747fa9ac97","_id":"@react-ssr/core@0.7.48","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-51fMwHI8YUQEGa/rlvRuUtilSJsxmqAFkHSu8vGIiAI2zgFdllTSm2ExUu5Fb67VkrhUg5UPfLqlTeHcY0Wg5w==","shasum":"5d3aa41dd14d9c7a7e4314b53d022e17af42cbdb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.48.tgz","fileCount":23,"unpackedSize":45408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3OrCRA9TVsSAnZWagAAiCIP/20JEhYbfkQy1o1xmquH\nJzQ4QQVKaGA5tTr2hyTheZmgqzLvmIpy05tIzSu+WgzC1YPUoUNWk0T7F7Hd\nbIi/tLeNj32Avnt/vedrSxYa+GZwPOxNl3r4pzKTBMhFMNOg73nZ0cLLTuY0\nkMiQ+dq/+sh4OTPrrliSA1aS4Aiee4d+WKauz2LqV2ts5bFNQdYLMkDzlJMO\n7e+mxI8moXInJmV7lR1LCeF961y1KOgl+uzhsUOcJjBhz5KhJD5zoBgzRBBb\n4pbdBf2Oekl6zaFnLaJw+eN9EZB8EYffM0Vf/wAwEFd1uxzk3eyIH97C/3Ui\n15Jb5ofN64cP9vnUo0NSw08G72eYdCldA1RHcq44tfUn1AdBX6EMHdGPLjLb\n2wlLyHqDa7yHwNNtcd4bNJcf1SvdDO+i7Az9awfJhj72Gr7TcBMDId/VXfup\npYWY8Oui9le2j0AhH6a4GTmzXBZczR4P6Sa3+h+ohy8N+zoejwkTh8VtqJBN\n0iZJp3viJWnxONanVPqQUeYV++6qWcqF+YNN2Ba7I/drMi7/+w8QuIMUsKbQ\nyYOjmJgnmvbBOKu2P/+mVc3R4IQlmt6sccXXTXWUR/6DGyiEaszkcr8ACQsC\nLBW4mBojUyxIPaPR2gfc6k/cSSM54eDPHOSC6IwfkJArii4Gy/suGg8+iWl0\nfYFx\r\n=X1Dm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCm//RdIMxBYK2yqUHfz6FZ3aKVNWoVvN0i4nUNyM0Y6gIgDI6wNpUDLiJGaeGjh/MGUEQpiT8KTqIBznvQHyITYU4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.48_1572303786642_0.37625865002624614"},"_hasShrinkwrap":false},"0.7.49":{"name":"@react-ssr/core","version":"0.7.49","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d1d463f6edcf14ad55c22f310b0cec2d4878c3d4","_id":"@react-ssr/core@0.7.49","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Jh/4bs5MK322WPFwYhbMpu6TXyzmIda8oHBAqKuqP7JuYMogYoqWs03capfMLQxqEuzLDeCTKqowUu9a+D8ItQ==","shasum":"f816c11bd4d91599480417a919fe294581654d9c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.49.tgz","fileCount":23,"unpackedSize":45454,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3SpCRA9TVsSAnZWagAArW4QAI1CJppWJ75SH2nu9PhW\nRFnHHdZKfppnTZ7U4rTzTOwf6AKG/L5GWIKViEmgJ4SfH3IRpOe7Do2i1dtz\nh8gfEgwQLtrbfuqfAs8g3wL/yudRWINsavCwpymZ0Du2NLDX7X64q5N7Id/F\nMz1mHtLb8ZJFXkhEL+Qi/ODdG2snvO6xIB3OryNi1rXwZ1AIR6+SERK/Svem\naaFIaXiiCxYf6BtizvGWMFKzJT4m2pcf4a05OiXECsIFo+882gTJtQ//5H4U\no5DxJzQnXJ98ps3kpJMlnEgG02Lr4zacN/lzTzwNbgHaLym/C5RnsvNG8h2R\nDkh8xAri2YbfAdG4i5hMgSILqhxppPdrreI2Mj/z7t65q/9dSN2Sb3kt6d+c\nyBjdy7COYCFjYBbU6Z1xZRgNyBXbI+yU4NYuu+rcqzpzbplgz6Vz1yQeBseK\nwdTXzmGrhmp9AM8m7d5jqcYD+C5MWwvqc7Qw/Y7SGc3DyOa70NZFLHXm7U9S\nDuGsyyab3rQQHgd2kfALiIkht4rmF2BSAM22b2k5B5FDpTzXuOjbW2hzbAmY\noF05Cq9fNhAh5XzZg4+8DsyNosqaD4jzafwFd3nRfcgs1X0pJ8cNfrP6SsGs\nYKKpGcbWcjgxAHaVU7Zz/GhwXk9DLySmyXS38c/zXqshpZ8R/DhHqlMxYA/c\n539W\r\n=GjBk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqCwlhcKxbXAjgeSghxa9wvfcaaxpD4Xyy8SjKv1OlFAIgdsA1ljB3M+VeXcTua3lbT6sl4GuAX1dNim3MOynf5J4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.49_1572304040745_0.7748027845009455"},"_hasShrinkwrap":false},"0.7.50":{"name":"@react-ssr/core","version":"0.7.50","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e097cc086a7b34a9e77ffa04cdeabd20841190d9","_id":"@react-ssr/core@0.7.50","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Rj//IwPPnTt9ktIatfbKCYUuQEp0C39H9FHRWCEKfunhifRT2w2786PPd+Sqw+gD+2HTzE92w1rq3blhmnZwFQ==","shasum":"dc95080bd656490b83e5cfbc19b0a2568763b385","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.50.tgz","fileCount":23,"unpackedSize":45442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3XLCRA9TVsSAnZWagAAWQsP/1X+A/+5X0dtzyuJH64q\n0rqw6Hwvm4cYJyE/SPZPdaO+iPTXSdmN8MIECkGoNf7TfEHPjjxikTqT8Dk9\nxk9aFQlnmqAJY9YwE3tcIMGJffYqhgrxysveJ0EHznSQ8XjK423WC+Wtfdbh\nnmHj/RWN68MhMSUEyWyB7ffzb3e3fc35PipllL87/yEukGQl+2McX8+WU+OM\nPHilkY7YsiW4j8Dmcce7gJjKYVrHE8rwZmE4VPFygpA0U/eqjIWe7ejbdmcy\nH8ULnEwB7t8OJoM1bIBi3bMVAegCH+gbHI+/41QnvXK9Z9+MZXCmx+jSUe6N\na0zQDy3FCf8l616nKvR4ALmGSjUX6auIwfcRKsb0k2xjMyzJOiOP3LfhkqmP\nT/RpDHQ4FmtDHUoxJ2L2q1qnKMvA/18x5feUBOEyuFXolaMmeEQO0QoFKQyK\n2aeKuK0dqHF94vXx0umu6cnx8Fz/LXNlesiXXDTd0lLKcM2IdVaQgRwzxdAr\nZtQdVoJRkNJYDcG+owYZ/pBz/rfYvKJmdq8UdYw5qp1QJGHm9Vp7+XlmbKZE\n5fBMZx34Q8Azu/B4IwefVxb3Fmxy/ktPP8FPoJ1Vb4+M/pPBeD2J+GDkcg3W\nQ1WJToA7uo0aH4NU2+B2pZhOpL53saVcA77cs5ZjNdO+knkVJhpYnjOHh2iB\nIHEe\r\n=7F/J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNXj5SgVUVJzu/F/KqbcIye5sSeoOyaoWbUdIes/VNrgIhAIdhtfhjY1JIZBdNeCMikjDY2gZzT/My9JIcA/f/F11F"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.50_1572304331157_0.20151970863230795"},"_hasShrinkwrap":false},"0.7.51":{"name":"@react-ssr/core","version":"0.7.51","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ad35846eee2d03565619a8639e736c0a7fa020d8","_id":"@react-ssr/core@0.7.51","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CjBzR06llE5MMy95kbktkNsa16dVi2pighj5ibRL0L0SMiUFSIbbKZoQMvQc7Pkahhlsl/tjTBcfEchYDgQJKQ==","shasum":"0181ee957b54781db3352419e08817b62a328dd8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.51.tgz","fileCount":23,"unpackedSize":45701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3b6CRA9TVsSAnZWagAAtEQQAJDeMwdQjutKq3UPkoBU\ncrD5hTu7zxjaIj5w5II1gjWfbLYiyUW0xMW6BAni9TCIYolTWchibW3Z9r8H\n75gfVc8AkoJJjrYKc54NhjGiPMS0Vu98IexJIl25n40BvSu3GtDxjDOvgJ4l\nqfY+aKIbz6RCoWiRNl/70pbK6DVfttQb8RCOUIXo/kxUi0wJUdmYJGr5tK1J\nOHgnuGLO582V2WT3QMsgi0ajIrLiGIRzzxD88sQXgSW6mKsaMP5SLbnnyClU\n4csuQuNaT8z5UcFXRtfX7vX3hsRAv4XftoctbfVCEkWD90QN6alZzoAem/Hn\nVhp0HbuJ8gQ+JwFBdrVwNv0LUlM/ZaWaRH8HvMGZJD066JXyVsdIXepkdoT1\nTb3/14bJ6zZDhT6+TYoSeV4f4AUk8q7gnkQ1/xT74BqO/2ENhK13TC/0Uq4b\n1hsdjsc/LwduSps/5mhYIcfhMD91n0M5QWNssa8MAVW15yo7u4h1rLKEtMK0\ngqo3D9pREgl2BSokwix/Tnikek78tMIw02lwxzXS2RB9f68mhJdKqlYDXSTz\nENUFP2Bu5KcDSucBjBMSXvEvoPjGE+DBh5++RAmqA9yz2ERJtE7i3LNJO2uS\nUOSqKVkh6XZGtcj6+z/8qvYQ9dux2vpJX9yR6+UG6i7b+NpRFQ4Mw7icXi1f\nbNZt\r\n=u95J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTZVsWFbZIN2WeEamAAuSltiK2aiWjRH0WC8e+nKA2ZAiEA6Nl4MJg90q2ejx6bulnpslFvtQIyAMc8U2MTfrEB/a8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.51_1572304634023_0.4451240981702729"},"_hasShrinkwrap":false},"0.7.52":{"name":"@react-ssr/core","version":"0.7.52","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ae6bd378f9dfaead41a4192b121c647c649d0fc6","_id":"@react-ssr/core@0.7.52","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9Cfbo5T9QhAR3aOcA3p6sxwxfqo1T2/MoYWJWFySOfkFbmxGuDOWlNLCfBASVwoPgbNjDr0/EFbJZw40Pg2MjA==","shasum":"f0ac3e6f26452a4fcf1e0feed045b55bfc72402e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.52.tgz","fileCount":23,"unpackedSize":45562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3drCRA9TVsSAnZWagAA2nQP+QHTWUvv8sEX8XA+IALp\ns9n0/Qfoi2PbmmPbp7WOrOAv+P3iWzBGInXsAJ/8535fOxE9ELRxWjKB4Mcs\nWh0GEdPjvu9NaojMKCAob52N5/fQJsxUx4w6qJhBKaWu5uffaGQNLiPGD9kS\nhUVAJQVXG0nr6o5j0We8utw91wjbYuudrWDI2SY5uAZPJyBREFtBN+AG9r9a\nT3LXs2Y7GEaIyhgRp6HicFpr47aYWHmfYwc0ARSwafwT1xV24DuyfvZ2VEeW\nIOCOky6nysZtNrWaKinqrUfIp8r+rU7i+aROpXKp25yEk7mEfANAAxQLEt2z\n/z2UjgJdDjSKbr+vV9osFjglmyx58wBci6j5Ju/IhdoD53gjjnfROCyf7WEs\niw8n99MLQa+pXnOYPPzkbosVOOWw0eaHITAesKT8CDePTSTWaZr5vlvW48f2\nO1bJjMeisXvOLO/xNtL5rn+77kqhFQTX6SoQKxfx0hPdX2grB1g7GZLfYLNa\nAeuAedW5NNRcLXHoeca6oINWe/ZwEshyrW9rXLKOx80slUAKgTYbtLM49BOh\nvJqJoIQE00PcoTS+lLZaMCnToKnm6rC4oVUymug/hlHFLXuNav1e6VMnu/mw\nPSqMoF8977iprS49WxnB0eefAJcgrfYRml3yFcmFDHSsNLQVhcBlJo4uA7gX\n04TH\r\n=LPhw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFkGeA4Z+ULr96eOhLy/z+G7TejWgBMbzEyHXcfNwoFAiBmbpxJGxogWVlF3L2biezMFObSKkKp5+IGxCymHgblwA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.52_1572304747364_0.3029063658292781"},"_hasShrinkwrap":false},"0.7.53":{"name":"@react-ssr/core","version":"0.7.53","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9544d693f9a132417b13009de345d491350eb957","_id":"@react-ssr/core@0.7.53","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-N27x/WAdtrIx5Do/M3aNJWu7MDsp8vtoQL7z7Wj8ycVwEiXUhWQ9KN/otOT5iik9ziaHyik1LhtrCRencppIKA==","shasum":"a57b158aa1611eccb641244917d6081ea9c07cc2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.53.tgz","fileCount":23,"unpackedSize":45562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3fjCRA9TVsSAnZWagAAXo0P/iiL2X6pp2Sr9EtY6giy\n9q6N6aMNi/KrbQV1iacRR2TXl7L+uur78UzN+fn8cjxEDqGYcZdGHEcaHZLk\n5M+B8P/H9l17NJqWH3Hq/bE/nkJ37xfuL7Rrc/Cm5a5rJNYgAPcFrjBr3NaP\noBlbzuusyQu9THP+OUqeBR7fA3+YmT2h+yi7OcZbUbf8LtvVgEh/spjdEqac\nRWHKUbyyDpH+PwIQ9nE+BYdSVnRKW6C57AubO6Dc7h+nUAbN3mcdt2+LOVWz\ndJ4CmatOGqduridepTtZ6N3dCfpOSwfkDMM02bx2Zvh0G4mlfboIS+UHJ8l8\nsKAiVkRYOIu5MjQvWLYT6oWZdDqTEyqhUY5r/Up9AnhE697vaN/QsGNsr93I\nECxIwZX3xaN4m9pftBijxmn1rQYbYHitdZl2nJ190OjqbYZrooQdo/P2cvpC\nUZnhLYlldq3RVRoNct5WfIN8ydfsv5CAUTUSxIf0sr6f0pE+WHW0i0ri6q3i\nMhG2Mvo8JdZLpMFCp3Tw/7zajxb723UFVfeANO9jllVM6KKu8+LB7OPt92f1\nHPicEWQ9q7XK0xaoXNElprr0wQp/wjoIfhPyLoI32d6DKItytrZvBIrStgLU\ndriklCKKwdQbi7LHmTUsmraqJATB1nLsTH0f9MVZe6Z1L8RZVl8XAXRP8iLs\nDZd0\r\n=D7zh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqfe9PgmIyW6uyD0Z4QE0G3HFyHRUCovl768JWUpnt9AiEA0ZbfoD89gyoHDbho0fYMs2siy5WEtAHozI4mdy3RAxw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.53_1572304867069_0.8054949195311489"},"_hasShrinkwrap":false},"0.7.54":{"name":"@react-ssr/core","version":"0.7.54","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"04f10c799d0675fb37bb30c58ed2b18aee600359","_id":"@react-ssr/core@0.7.54","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Zr4KlTE/Nyrl4V740XeHcSlCPMozeFpoUc3MmjDrEJkdTSLw34RW+ulL2Ot1HSCSKCoblCwoqrN+SmrW4mhdfQ==","shasum":"f991129e48887b97fdd450ae39ec47d279cbcf62","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.54.tgz","fileCount":23,"unpackedSize":45554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3i+CRA9TVsSAnZWagAAtWMP/3yPaICdcoDolnCMEImu\nAfpjAAsy7DuipvDc5E9Fs41B9Lgp1W+/27t85u2OnFb653VU5RSqn+4xHXEs\nJivMdBL3lr4O7xOnIX6eSxc9cnn9Hef7iq6C2rUX1obcLjsZIbKyyLk1vc6C\nW0ccaK9Ejih2Pyo4hnBDDvA6fe8sYoqDVjxEZYFAOa390xjHljv7a+2Eim9t\nNTj16pM6FZTwe324Odgf6hOSXJKVMj30rlPo/zHS0tnsFGNYvnBkIy8Cb0HR\n0BVnX5CxzE/LLZUz2C1fzImy4KDKRGy+jBggtrh04kR0mute4m31PJbFobP+\nui69gBB4/dOnZyGXzvwCGEuMbZ40Dz++Gh5JKej0K2cK4MwqFL9qogJNTaUL\nusdmm3LQa4vcgheLH1dzV9AYnjTxX5nPEgdt3jA5InJaZp0kcTl8ZjPXiKEs\nnJDFaVAYn3AkLJviqRghCCE+XtZHa4akwhYQ30QCH5A/akbs8MDVTH9WpQJh\n+VHfuniiEpK4SzUYKGtxB/eyrC2Hkp/8/5Tl6AIy1/ILpNiSfG10W2UHgWGX\nwQepoKECVMQPNpm8VCBl+iVjlpIqcBIMO9qJpUJy6AjXLheV6pHc9kZkLiFI\n6zWCcRuvFaf4kaNifec6CBy9rRX9Lza8con8s+Vt+ymwgveIkXDgJyRSAaSb\nn6wv\r\n=SB5n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHd599u0gnzp4d2u8tqy1qBQ7c9CJm51kjuNqRuctL7TAiBwGNwHlXEqhIb00nSlmx02OxGhszFeDkeWMng8UWFUjw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.54_1572305085704_0.3353260942417291"},"_hasShrinkwrap":false},"0.7.55":{"name":"@react-ssr/core","version":"0.7.55","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b5f35c16d8d900645569eab060a8e4a7da6c3bfc","_id":"@react-ssr/core@0.7.55","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-yzEKBpXaadQxG84Z4U0pRCHkTH3SGjkkgF8Q2pjf9b6BsqAHh4eFRL9hf3KCf+UOv0vfhENrvgtatpa+lL0UUw==","shasum":"c5b6848a3f074b700863b645d40bef8e4322f950","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.55.tgz","fileCount":23,"unpackedSize":45580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3mRCRA9TVsSAnZWagAAEkYP/1BG/Fmurjir7BmeGUGB\nV/FmldNheB60ivgRMPKnT/SRAJgb4btaBnNGOLKaHGiHXF4gsZUCXz7CnzFL\nwq0P555i7W5Gp76mRTq0MtIH3KOoDXDgPz1N3aBRYZ8PClhswPUAzIyVR9eO\npXaJTDcEDIqYUtdT4EChWucgc7unKF1THPEoYZnkNHl9iorP38oIj0Z+gBmg\n/Otg4k1wlt/yjXLjGlseU2b+Y6Lpu4vnNDPFOYnzwVCidvqksvKW6B2b3c7n\nClAbwP2ZXy7wOZ7CKSggmin9YpkelwqvW1njXsQdUlPxoCrovWboDRB6UbF7\n9grfVBqdcwdyzy11hfu11NxZjTi38LKo1sDyf0XTl7pVXCQSbtNk+DLeWk6o\n87M//e+6NgFeAebMDXSsQN7GGAOsAAMjP4651NwPWnikFhMXdjKKUiZsGeiO\nk9C/iNBJoeT8EOa5oxZoX8cUPK9VLJQuIY5d6NDhVM/C4rmjRI1PaG3O4sNw\nLaazTkkIOa9+neHPYE4QxkmVhV9W5KqSg/NHaPXzMMU8sYrXl8/wUibbt5cU\n7vyDk+xnkhgs1vwgTnxs9lQ12u0oM1+qBO+11Z/zyVb/Dt6k3FuClDq2YuRK\nbqzxj56T18vVrP5KK1dfbPfnyu6lJPoNP2WFyRHWCZT+p2kRdN8Er7v8Ru38\nSCYi\r\n=osSz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8ksktOm5rZnnDe5iz+B74aRJncQuyVqz21z0UvIVaNgIgft1YOnZBiCsknrLDWHG61UqQdF4Y3BP+0Q9ufjETM+o="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.55_1572305296626_0.1361402461127894"},"_hasShrinkwrap":false},"0.7.56":{"name":"@react-ssr/core","version":"0.7.56","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a44043b24b2e59b0f12782bce9211bd1dea985a4","_id":"@react-ssr/core@0.7.56","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-L+V80x0YK1d5+J7mAkMERn8pw96E/otmoegAmN82yxoWFaoZQe9vNr1VECGpzI+9R5HZUa2F8dAjnj+IhjrdEg==","shasum":"938c3053dbcabe25109c393412674d11ffaa8d5f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.56.tgz","fileCount":23,"unpackedSize":45624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3okCRA9TVsSAnZWagAA/fsP/2aN6XnOdCZ9Z/U5+hQG\n/m8bpY+w6ytQ/H+TF3vr1LuYkCRcepTw9rMPHCEHeFz3HhBQgsdLoMCD4RTv\n3tdcpEfT7STVID3ABcV1C0cuawHVNW327wI0pcVcewa55b32mmNXn9HP54Cu\n2DvruO/XwPDyshVmhLv5JGa4jBtY6/J0/9fOcpCj1p4Px6+BI8gdZBU21gWT\n2CiEGj++Gu4ziwhATI7s71xqxlfKwAvzXoeASqaY4xeeOyjeBZ0SSsBTOgDc\n6dlmE9MZ+lmqBWtEb2DOTVJeyXYqE5Pja82btDQkpM1xdbgpUqpS2XMjFkAi\n36f0oYH677sNLDN87Gq6/AsJqcIbUJGV6WD8xp8WyNVJvj2nipMs23el2ecd\nqbUD65v+lTpbEaBc3MYCwLQ0ilskXrYjTjVs8M+D6eFRdAL5fjzQpkyxjI54\nbnYgoF2/DG5S6pU/phKVUy7y9g31r8+S/6KEIiA6bGBvKgqMDb8Fn8Tm7VPR\nJnXFnwCV+F7ZHgzrX2sdn3i4NTfF2JJLQCOQxpIWXYzdlsyMgs+KAI6bGeYj\ntdHlxQ54JfMzSpDD/aprT1nzQJfEBTufX4l34eiWqgL+mNjNsVZ6auVKTU8w\nSiZIp/sJS8f1y59ARmG6NMR2sy+TPqSWVIOcMyJmyRzsvKBEWfPjfhLu+V6i\nkPlQ\r\n=bn7m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbIn9nj1lPPMIELldK0+xI7n5r/7dhgd9bQ8QO+tj2EgIgVQppkUh8xxLcpzjjm3PNa4stHK/bb8VwQk1QtrqQgzM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.56_1572305443407_0.7570858943564203"},"_hasShrinkwrap":false},"0.7.57":{"name":"@react-ssr/core","version":"0.7.57","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"94a1965de8fb035288b14bc9cf87873f71341fb0","_id":"@react-ssr/core@0.7.57","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5pajsR11XPKextVu9cO5Fd2HaZlbk3HBkc/46fh1ud8kon450zFcPs6ilyVZju1E+HHK3TrmEnbz29Zta5hqxA==","shasum":"5e89e9a402e3335b87f0a710b277d8a26f481eb9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.57.tgz","fileCount":23,"unpackedSize":45721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3tACRA9TVsSAnZWagAAMCEP/1O/xXdSLscC9UjzGAKk\nE49gNYoYmvgFqSd4XSUzbmZUpAupE5rT2WRjb9t5Rhcf4ZgEpy1+haLSeuzp\neEBglsFJ65Dls/u5Z8rzUAhzHEjGRATrgs9qcS3sTaBgujfiyjuV+ZNPbSMI\n+VNCqyz4H+7BA1NjvIus+iUkSf7+hzjvZe2PE96TyCyA1rc+5st85/lZM3by\nvyeQ+tKljo4zA1vnAwFZHLN8TUb8bVUHOmGBX8rF9vpWcHcdBdf9bha21+of\ny6BwBHnI20541WTCxwdDIrs4yv+BgeOpomeYdfQ4vyFIPmkbVBFckBo9b1jo\n90lVpUqE9WcPvgAXZ5kAb6i/6wM3aga1TQlICOahsX1yUkVZeKvTejgM2kNf\nv8TVC74HcNjJ1ZhKHNEYIzlkXYjILNLJUR1k8Ypj1wHhp6ueX6AWJRcmp3fZ\n0LTmteTetIRmgZfZMCWuCfQX5FsVEMafM3kD6JAfnmSsnAKeQYuWcA7evNLL\nRvYihNMASRESgHY7tFopBY5r9ca7FKko7T7DiVKQ841lkW/4EiO/bayCJi9g\nznaF0QXY0sa5nxqRN4vxS8sKXfUVjnfO1Sd0Q77w/SY/MLB6dotGdJd5VCkK\n7yOXpGBoa1AESSpiDCpD9U/alBKgBL9diSrsUtUiLRGRQVN8SCQcI/FJloOy\nRlMr\r\n=WN+j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGeWiY7ojWxRQIfyt+5CL5Hk0usr2gx9+KJZw0ukEjq2AiA2yOzbHVI/wndSXLx3+ztQHyImYWla+XNvGSFnUXA8CA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.57_1572305727719_0.19229883120219782"},"_hasShrinkwrap":false},"0.7.58":{"name":"@react-ssr/core","version":"0.7.58","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"18b3e172f7c50dc607fc10875a4a21c879dd4a73","_id":"@react-ssr/core@0.7.58","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-06a+UWl2J/2xzyiuP8e8z8wiGT2TtnsZbwLOAyCM1gwu+1AKoPE221DWR1KRbGzucWrc7TAKNOJNKof5yj0Q7g==","shasum":"5d97c9154722146e4d5059a37e9ceef835f73c00","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.58.tgz","fileCount":23,"unpackedSize":45610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3z3CRA9TVsSAnZWagAAFCwP/03+WS4ULb28Zd/0hoPL\n2JTqzUIpIs3XrRn4NBbxlUPW82KPr1FT6yQez3LeGumLLJPyuKhFLQOB7W+4\njWtqQWByFp/LIZNWs9+KPHUAUBaY7BqW+/XEWy1DkGn4tVPI6Xs2uMWU8J2Y\nBh7tTzfrnfoFnpG14vPxxV3hmNpNABdGjJPuJTi5feITJoSXzR5v7nzBq7ab\ntcSubJwz6/4GxkXLN8SuiNCtK2h8pQKJdS7klFDD+IdoyHb9uvxLj7/hvy21\ntaF6h+qeIrLgy1JOimjMBt3Mo4UIBjs99hpIRTeMNe5CJGddxZO/HdV43Fwc\nKUYHTFqFghnyMuN4HW52xzce42/t+HkXBNK43c1JO2Vu4pmPLjv7lHxwgMNJ\nWyBKBULOj+PTL8F0h1AVFBdupLtbaNop7HAju+9UDWM/RZDW+IJvvEBP6544\nU0pnw1TAnoAJ4wHb6ydZ11D4uILJp0Z0zhf48Nobkg1jU83c5VgF1/t0u/iW\nspGWJ/NESqBSQj0CjA6NBtwGYoCvd+6bws0+WA38PfpXZgw7ECbQSuRwopJE\n+Hnvb0sZ7zhzUGWHnvOx9d3sj6acJRr1nelJSz1NyRru4DEEEdpdeaquOl4V\nz6zVlFmwuoQM4+BUj6P10pyJk9RiPC/hPoeoUmZ3dXmOBzS1wxdxjledeOvw\n49vS\r\n=ioVS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFS4DMcXWP4ZeUwKo7D90CnlsQGwZMCLOkKJY5tZ03FSAiB5bCLypaEjfK7DHhtLA0gdGC87FokWCiLvzOd96I7dWA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.58_1572306166754_0.86035462187943"},"_hasShrinkwrap":false},"0.7.59":{"name":"@react-ssr/core","version":"0.7.59","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"de638ff505df35c94aa85f7a22892d2503a5eb5d","_id":"@react-ssr/core@0.7.59","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-14g7nhdeZc+Qg7DHFb/fueDCDF7XSsUUCMGe+5p9g0+Lp7lL7MEIc5RgGxCn77/Jdf4aKPCuQgh9sNkvOsiRmQ==","shasum":"bdf638c08d88c1c5a0b47ea6edf4441c89109421","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.59.tgz","fileCount":23,"unpackedSize":45691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt35/CRA9TVsSAnZWagAA+WQP/RzgkvR4CDjcWMnk5e/A\nxW+BRWkNKXCJZmLiMUGJXOstVSL9kemYt50T3yyBfvCpPBwFn0D84Th7Fnbz\n3Vdpsxyrv43L6jjCKC/BVuI54aHckTez2oC4LZfm0Yc8li5i3pcQHsHO5Wef\nPw38HA+bmPoMhtQGLrJS7tfJ6cBhE+g4QqvVNE58QhIXHZxCg3xBd+yjmDEe\nCgpTZdWwuqjJKOXaPD+gT1ca3uz+WNylddcZXhPH8Qh58605Selijam5o38g\n4kE2PeYKEx3HfyTV+J9wVIjJt6eE5DrOuq0VQHeYEc5vSaT5xvPq6DzBUxye\nhQnMzdSNBq+JhQbLt+tiyML7xH7t0w+RH3MfTvX9RlPb5mDWrLtUmbKST3uF\nONxic3rVTlhWyU0P9g3ekKwRFAXmpsNGHI5bjOzq1CcCOeGFHv96y1L1u7hp\ng95la4P/LfbFQ6OqIBqwSCDJX1B2Fg2BXdb5FWkPPcAvc4xEPgeXM7SDZKgP\nUEEN0wVfp/kGH69uQS2Scn9Str1muFB0kLE6lS91y4zLemI5R4Ne53Mpr4qp\nV8sckbkIz0cgpSADZ1ALmcuuuKaxP/NF0GS2cgwe3aU9gj8qCVttr2x+Bqcb\nrLqD8RmWzbFU7d32JPzajsVgJg/i4vwfSCiHnm2jKrSEjkwpC1/dGqlfC9P8\nNVTe\r\n=Z0HJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBj12avA0dScFiry+XpSv/mLzOsiEL6aY4Y6/z0oZZEeAiEAu/5lpLlBeCk67belq8Jcy1Mg4x7MjUtKABLuk2uZagk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.59_1572306558647_0.47765309712068604"},"_hasShrinkwrap":false},"0.7.60":{"name":"@react-ssr/core","version":"0.7.60","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4eeea2809b6b7e45a8c6d622b228af61bccab272","_id":"@react-ssr/core@0.7.60","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-y0zGMWFSFSzfjclr5AdUBctp5rmIlOnNcPdmI2Q9lj2eSEeucgLDMO6ldOsogKOmkxEZSS9HoLf8OxBgWEpJPQ==","shasum":"ca8c61635c2f14ed3c8b6e2840cea2bcee013999","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.60.tgz","fileCount":23,"unpackedSize":45510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3+bCRA9TVsSAnZWagAAvc0QAKAQmDBEw+ITCAfNq+Nn\n2VQgK/wR4AtaO5YlcuopG+vC3ogg/rsbZzkUSMMJZkciF6HREnlpMbSJOsnm\nln8sLNDDmSP8v+LTP5tpnrUDzTi0ysh9VUiIniDxVp3c4pzdMz6ClzYZ4gRX\n9ATgbonChnidH+dqDloFT2EFZJmbEhEKnoWkOXpxxMAt8Pg25PN7yNU7WUkM\nSkIq6INLDOZ059EjPDIC/8QuOddtZ29ibiYixhpQOeoS1e/s917t5FIkSAij\nuVgXA4myx3kbFKnRJ1O9y1B+tLxvubE1aegRc/5lw4d3qiNILZyDAOB1JKxb\n7Dp8djvdpOW0PHmkPVy8tU3rKzZFEHZK8rwKafndED8kRCElIH32cz8nuUPq\nm0tu+GjimK0FTTRENzFCIrF2l55xcUEWlKJ1vcFzBY1a8fMoLQ5n4kFC0Jda\nM6RJb2jPGFn0SuOR/PlSjyfzXA+A1c2qfMenjEBnnXUnb9ku0q3qSzGwi4Rc\nq4eSAKr+hnSJtUrih5s1s/1kx2vErPlOsAY86SWcRnFsvBQ8sXpKmTQI5TVr\nbiFZ46opRHk6QX46bUjGPgAEmUTHUwRA5TRVg2pNIWQh3oTUiwj7FPIyN0Od\nud56b8TXRQdmEk7iDURnd8+Kr+Qwosds8zbD6W8ezeTeqDDdy7ZxsKEnEilD\nOskH\r\n=An0Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTr6kFYw8cR5zMKOKx8JRsrJrBcOWqz5TmWRRnDX6RFwIgSzx3fPtr+oHlnDOA46Lf2K7PyCL5o08thrIlCMN+E28="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.60_1572306842754_0.7773929645801441"},"_hasShrinkwrap":false},"0.7.61":{"name":"@react-ssr/core","version":"0.7.61","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"da2338c8fc749a8da8ccdfb7395b844b89f3fe84","_id":"@react-ssr/core@0.7.61","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-6RA2/ji1YLQhdO7mWIxX9VoiGm6//aFc/7qxtNscHychvg8teMBF4Qcmoah0BKCT/ijpSjDeH4PKuepKlKKJWw==","shasum":"213e9c318d46f390cd2037faaba7a538963149ad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.61.tgz","fileCount":23,"unpackedSize":45070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt4JuCRA9TVsSAnZWagAAU1IP/jA4laJel8Sd3SK928lj\n1pHEA6MfNJDakHDZxVQ9NULdEH0EH5eVZofaNwr7jWFXFkHoa15xKB+HAySN\ncn5yBUZo8utuzXiGEnsfPg4dPLGSAFUb+e408dmTyg7u82OGVg5g7gFV4j5/\npj4bN0O0b6JRyxld4ITbt2gN6jeRs1p0UR5INTQZR6BqmUAoCQ6YFl6aQctZ\n5GqsbW+VkMQIhTXMhzS6skxYTun1QA8P6fNlb9iRQTmuLT/s0EqQ09rNAFVx\ndkTGtoFXqF93eJ+jtlASb08UDBQnUeQPQZsbXhIhs/zugn3JV3sy0lFGkv59\n4KVLBHEmlqR9uHDncddXigmmJXkowCbw1SELVidktdC+69biJ4R1XPdehOKo\n5RPLLjkZMYwdi5B+dniSYWadmS3zTF+sRzxM95vuymRoTN2G0ge3LeaYMC1d\ni1q4L/WNrfV8OhY1DCITPfAdYbcZeCYFPh292cRDT+kqfoUBNgAxsKFFTTk8\nWrpUUt3oSreHJx3Cy9ga0QoC3zEMmPE49LG2yy+DNJYw/tJhzzLWu1SLcKzl\nCFtfscByf5zzWLpnuRCKThKTG1BXr5ug02HsgDUzK2ZQJwaDsVjRC6eEH98P\nfuu2lPJRjAzdkzMx5ZuVepJhtZoo0VVEwxl6uObAfq01T3AvnfY+OuTpmoXG\ntGXH\r\n=uBI4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICr1iKDxen8ia/VxfDtKiFTKOKDO12FHi1TcngjqlbaxAiEA/f7YWscwjGISJWatqobEHTGdRirb4vA1TYN1xGe8GiM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.61_1572307566404_0.16054786576715196"},"_hasShrinkwrap":false},"0.7.62":{"name":"@react-ssr/core","version":"0.7.62","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8c792205696a595dcfc95fd2811377c416bc1640","_id":"@react-ssr/core@0.7.62","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sjge8udtbc5LSHTht7HFflacZ1orX7mD11YjIELTn6ju2LxyDysvrrGc0b+gApAo0noTXAHRS/p2Oqa25oh6Wg==","shasum":"4ea884eb307b76edbabe592b013c4a6c7a711f3e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.62.tgz","fileCount":23,"unpackedSize":45365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt7wMCRA9TVsSAnZWagAAfLwP/2U/cwkD4raFEczPG2mM\n8p2LvYf72HxzeIEV02vBAufjr1iejizV2eh72ePVD4CLIpBND1KXLCPBVXUz\nM3m9uY4RDHIaTdnBXhvfnAPIf5CTdLPOtXZb2j5vUD8WEjG2q0w8osKCRqlD\nOMELXOZgTR4IgITDq5hcg60mgXhCZUe9qlB90rqp7bY6D3VL10u10oWTczwx\ngJrdaEwgY1vdNHfxdMD0GpzZR0IUv+oqbuWNJphhqLRYsYCXpW3FNkxewVL1\n2KP9T/J6rMWRKsYqsqaiFtk4wdxFBZNuHHKd3tEs7VzWgoo7IcnY4zB5OUJA\n7u+qq1WxnFwTRoAlQPGcABC9tbZU9w7eQdENSh/lOxL2gNhKzAkazUQJctqI\nvTex2Zy0RaZZFpqK1hQKmp22o+RAZwh/90HWoNe5t4A2QuZH+WKYagpjmO1g\nQIiEZPb/LMtoqMQYQEHJHmHi0DlVdVYn/AezqTS9C6HuqKlCpKG88ipNEGKs\nun29oKkzTXJnfAnd0ZIvaLAHloIe8mZx8IsPVuAZZQjXe81CKnFdw1vWqoww\nQnP9cMNXtGtp45baUonnUaPs6Lu1YUrx90ioUE3O2eH9rrcefOK8ieM/9kHV\nT4+bEXvvmEzRYxTFeJFXbtK1Nt1UH4iomuALPazoCv+5ni3zVzAoAHayZDDo\nH4G9\r\n=8wy5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgzbdeFUerH4EKzsP01wp97Q7d9ueRw9L81NgWIHvrvAiEA0EU8mV6drGMzB5InzbEoXZVXX+pRZXhApgqHi/WiInY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.62_1572322315896_0.014717674571337769"},"_hasShrinkwrap":false},"0.7.68":{"name":"@react-ssr/core","version":"0.7.68","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8d9640d80e5b848ce1b1677ba81890c1a29f2992","_id":"@react-ssr/core@0.7.68","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ou6KoOsn+pc7NKD+oFruHxHIoO4jyedlBXBIuwhHn3h1YafWUFnBiPwF4fucZ7S5DyGoWwvCg1YQG5qOcw38Hw==","shasum":"47b7791ddf4b0eca7789d5df02377b301ac606f3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.68.tgz","fileCount":23,"unpackedSize":45070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt80DCRA9TVsSAnZWagAAVZQP/iDhEGP5dOGD2bg0rrAs\nXUXdz+0MxRexs95zUxyQzQpE1WsgBdeArNmlJziChZvqqyV6CA9j0a7jdj8W\n8X8k+J8I5vSzeps8gft/EaUr1AT1UQPNI0Z65P3WMexTu2ffaLJ3XaexavTx\ngHWYezejA/dIpj2IZ5qM1aY5AyZWwKkt+GthB3yrHlBaw6xC+sPK8DwDB3yu\nrKL9m28evcm5VSeuDGiPksvhGOY+eRggw2CvU+h35DRxGyxKiG/0P/Dmj13c\nGu/P5q6JypvSGxfnoaP79GDCiXuTqC14IGzXIW98KelLv1s6l5cKDe5QICwl\nn6bGzsj0DxnHXum3yo9BaOhvKtEpXkz33JDOSZK0V0wSzxS7WCZAz2JZmyC3\ng1rSL3aGKxi/vuHFkuG04SBi/lES2Y/zWNorpeGGV/uH5MaSgR4KR1DlzFC6\nYcU/X8ahU4VkM90WgIyWDc9v8rYQVW1JWovkly8OG6objrngoou/N2yT7NOw\n7sSNj4t/KeJgtfFAF4EsZBjvPXDPuC0x1qKTk1tqdfKVKqbPhPJ6jqEGFZlO\n1u5JzGdLha4XzYHpBZ2Gnme8nn7GomF4QnS6t8tZj64Op4OnWi/+4x/6hH7j\nJf7+tO9Z2h3fos05Phro1BsD/LzSdvGz4XPEnZF8EvmrjJxAsslRKKkOGgVO\nInFC\r\n=V3fv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9pjTLHB86RwjuAcXbq6pIl2xm4MLTZhODjCfov/ROJAiAzZCM93ppWHxR2RQJAFV3uCM0Zo70Sf1Nd4WWmgiaiLg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.68_1572326658715_0.5237398154362791"},"_hasShrinkwrap":false},"0.7.69":{"name":"@react-ssr/core","version":"0.7.69","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cb1228d2f63397f9c05fcd02c83bd7a78fe7b8be","_id":"@react-ssr/core@0.7.69","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pcm+tpGfCvqjEC/haRsl46Ns6TWvL0t7YbqHpv+IDXOE7XeVxU/gGlmPBJ9waUiJ/bGUnYhQHO2yOKk/KY7J9A==","shasum":"b5f7503975c9b1c5c3d55b1fab24f71ec68d6e71","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.7.69.tgz","fileCount":23,"unpackedSize":45088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt87oCRA9TVsSAnZWagAALooP/Av6tXpF3rG4gi5c3WlU\ndPVcE6imrpIt4K5r2q1t4j72P58iO/DlolKkvkFdFArSxcdjNuI0S/HlcbdS\ndaoGn0WTtn97spTDTzthnZrmprbPm6NwRYsu/efdqWmb0XPxYBs5pTAVYLhU\n9V8htym/00d3W/Cn9Ba26uqeP7VyhFc3pHFvvFj9AkwPFBZOxeq0Zq9YSJaw\nJruWc8+pABrQJiBh9TNfbIEkXOgv6LmmmVgzPyck0cxR+/6Qz66BXthcQO8N\nEnK4yy3VvG9229KhtUnMS7FZ2rzOs/1BJipNVzve2FOSxWdD/V8Z+bdCl5A3\nSMvsKUSY6Dnb6SRhnCtErokMXmEttPgyiOOsXlvsNtZESs1CftAjOPvmTjjT\nRZLFZ7f9+C3SE81qJsvKH89xQbxUL3eXNXfBSHdP/C+dsSBjUjxrB0C62HmO\nWbKGvZMTqZw7pALhFfGknP9l9pLnm2BBWMhyrwkS2YZvua8J8UscDOqAnFSt\nt4JD6i47tFGtgCvyA00iOXYtpT/nPYa9ARxoF+9OaqwycCvXhgTuiO1mDYf0\nRp2IuApq9MNRD5q0mweMqKl7+pVXyPGNF+DZxbdnYmvKSXhdGXTiDitQjAxS\nLr8zU6B//D0aSR60OO80nmz0kw5+9vj9BsGs9ZTEtgzQUwQSKmgxKRdNHUxa\n+wmr\r\n=yXUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHP+sjBq007Xoza3XtIBy4r8UnPsgWEbEFkvO8cJN7ZWAiEA1twYzzBHspsTl360FYmGaTnD8bCgSw+g+KYZbG86J6E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.7.69_1572327143767_0.9849451001450658"},"_hasShrinkwrap":false},"0.8.0":{"name":"@react-ssr/core","version":"0.8.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","cross-spawn":"^7.0.1","fkill-cli":"^5.2.0","fs-extra":"^8.1.0","json-url":"^2.4.2","lodash.escaperegexp":"^4.1.2","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","resolve-as-bin":"^2.1.0","terser-webpack-plugin":"^2.2.1","webpack":"^4.41.2","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/fs-extra":"^8.0.1","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"25ddbbdc5b82a005bd2896073b8b320e83cab3ff","_id":"@react-ssr/core@0.8.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-I0uK0CtU6qLGaXvujUJuTmjgghM3eOs8aouHJiBX87DHEaYp+IcSNDE0eTPkGg/8hdJx0nV7RCiqW5aIlil4jg==","shasum":"d415c2f6fb23970428dd8c86136efe02bda31ec8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.0.tgz","fileCount":23,"unpackedSize":45142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt9dtCRA9TVsSAnZWagAATFYP/jNtRzVg2a2lu3V2EEOP\nYxOkWRW1rqoOhNzPI+DnB74/c9otuCsPthcMTCrB7WLiQ4b5iXr2c60HzA8x\n1OJw+DGCwZDvRzCsyoo0Bii+Tx3IZbXgvCmp8/lLiz5VtRrI6n8JeF7Qtzs5\njH0YF2Ax4PbInpHgjmmRVjDGcFuIXVxJi5RsiG52b3V18n43ZNgBYKzsVOTR\nCtck/agYnRLca/4aP+C4fDXUY2A6vdDFxHwr7yxIsmMIXptqEce7zDmH0Ha2\n8E/degyWnmfrFbUxBdvAUsgFAvxETwesflhSDKk24tRidGfLgX4aLZmhVw9k\nVQ0bBraxH/CHO1uL/8AL8KcX3/YQVz3LJxelhaXJE+3DpKqBEC7UGOG+Pg6/\nQ4xymlEu43DDuwGDwxmiw4TaGDLvUUF/dX/YR+Mx/xuULh4nTWtj9OrUjvab\nWajDtz+1UqXj8wP77DRqMiL5a8AYgV3Qn0rvM1WDgTnChRH8zywZkTb1iuWX\nclujLkMyfS19ocgYGPuGzwQ0rPtX77vuwrhhe6hPwTDaDMWZY7Py34vxIPRs\nRvNQTmBaSBHhpU1YN56F68h8+CvJFfgwRfUXyqFpcSjKePCTuoD/bDL66pcz\nBxZoVVihXYom+l5/mGkAIevZ4GG5+M1/7wFef2FhtojYkuYk3Dnsu0MfVman\n/xEw\r\n=1KRi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQQMUQFCo2DXK0PPyECdrOzOfGI8JFMZv1RgkHCjWiwgIhAK4dgV3bpkjuD+h7Z/zk6+I1F9XXOmh1ZesG0A082Y18"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.0_1572329324937_0.7384474233295792"},"_hasShrinkwrap":false},"0.8.1-alpha.25":{"name":"@react-ssr/core","version":"0.8.1-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","express":"^4.17.1","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-middleware":"^3.7.2","webpack-dev-server":"^3.9.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.2","webpack-node-externals":"^1.7.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-middleware":"^2.0.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-hot-middleware":"^2.16.5","@types/webpack-merge":"^4.1.5","@types/webpack-node-externals":"^1.6.3","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"935ca1feae6c845267d1510589de03f037881372","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-d/sfYSoMHuKoQ9FQj9p2HujeBnP+EPtzKrizPe0f4ZisQlNLGDidVZnyKz6q0g7OCu5C1LZrbi8KmoKjX8+CTQ==","shasum":"9af272666225e1455729c75f6ba70074c5ad7145","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.25.tgz","fileCount":27,"unpackedSize":33970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu4X1CRA9TVsSAnZWagAAIG8P/2Lco0kJoOrkHrj45mqE\nUZSg7QpQIJbTQy1XAuAdEuDoA4YofdVvOAv2i/vR1Gb4Tz79fcfirETr0QuS\n0y3y3EqyQd2u/arfnDVAsmSGesfzAHeBPXZl0jel2ZfrqjV2L2OrCKGb+s60\nl0kTZpuXq6BURxzq1HFAKnsF4XPuTukPjomdtgRDrJTZglGzkdp4WTu9ox/n\nDTH4ARoZ8sDQ3VCbqy9tW5ODMAZnkEp3Qba9tt+bnZJB+vUjVKgMOMPnYaC4\n5WCRw7ZAQD27psWiyvTvWwePzexkP7IOi6nKEljEZKMD1CYFWAB8t0hbFJy+\nquEtMbjH8zFzZeCdlvwgh1EYwImr4t967tDygRmk1tqWdklU9/qPuWFThRHV\nLWseMK+ediocvKlLVQKmPEW0gVi3CDrypEPbWfksIJpdvFjsFsuNguSYWPM7\ny/Parxm3CJ76fn1dl8canOgfp8QeRWRpH0d8Pac+UhsY4wXKttHt2Mg7lBMR\np+SPBX+7fLd8s/kz6KJWGmZaOjdjMSeBoFPVtg9ATgv+dZ6pq/qUGSqLzo+C\nUjucdFpFK93aIvAGT0HeU8qX5bcjJiPfvxf8H0pJcDXECFOSVuWGarOJoiMa\njXjTYoUn/HKLgxe02rlKG4qa2n8SQtTudGAcQfsahb07WXsznERBZDesApUy\nMRlp\r\n=wTqh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqrW6jqI/NN4w7vy1TACYwvohQnPC5m+E3QHfY3qiM7AIgNZoO439jXe9Ij8yZ/jkG4hmk7FMR3cZAoBbQHf1NdoQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.25_1572570612631_0.0984333358711007"},"_hasShrinkwrap":false},"0.8.1-alpha.26":{"name":"@react-ssr/core","version":"0.8.1-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","express":"^4.17.1","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-middleware":"^3.7.2","webpack-dev-server":"^3.9.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.2","webpack-node-externals":"^1.7.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-middleware":"^2.0.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-hot-middleware":"^2.16.5","@types/webpack-merge":"^4.1.5","@types/webpack-node-externals":"^1.6.3","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e4ee4afc8707e4579d822dbe7d69209874d82e52","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hHICbogdJMe1ANHENSoaL9SJ7WGIYAhoKPJIwVkjg+AoVjrPGeaEJCcamOol614gNFWzACl03exXogK7ojciBA==","shasum":"e50aae073114251babbde6a23b2c1e2470d50fd6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.26.tgz","fileCount":27,"unpackedSize":33991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu4dwCRA9TVsSAnZWagAAKzAQAI58dBA3EVGBFvmuuZto\nhksi84iUrhUUJuNuWHloJQdMFKSlvC4ms3HUdLcVMdlZM0iRxdp0VFxcUR/x\nLIzgtXmhcq8qsG2I65NmNInAamL+NPN9GmGcZy2THTwugrUvTd0GX/8TJLn7\npZyAiM7z1Y75gw4CQODBbfG47dQkvexMFC7s0c2yHXti39saUKeWjFG/XkDO\ndrmjGGf9ob2vBsdrI9hps3joFS1tE8kzyOH8XNf9kxIMrG4tF2USiF+Uctu7\nkMyRf/ey6ZvAjS3F7Q8A5RB1ayI6pLaOzaWbIqaCiIq/8vIDDxMp0PSdCCQH\nBTMiYabl8JBMKXQhLI7CAlOwzdamrrXWdgbzrQwk61H2BlvePgZn4qkN9sZl\n2soqbRlqhpLLNSHUfQReC7v7aBIagEQzUbOSHsvEECQJ9Og3RZpdPWVE+6AF\nB7/aG4UtY18kUJeroOOi6lDf3VsAvOfdOPhXolFabcfiJ8XIGUzxGaaDgS/w\nfAoAPB/IM3ypcbDw6kuJhi1SddKEdFCl4/eVsIP4HgSCffj5MaN7SM5QrIVJ\niWDtJKHhtjhQWDnwrGJ5p4ax/aj+whvaVqNvvnKTBYzxRjaYTKPOuYSlr2IR\n7LJvXuD4KYHJZ+Q746WDHoiO+1o+89UyXPmvfQZ6bykcHHunQzunstIowLs+\njct4\r\n=0tov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOM5efFAZ3fDpNJnkoDPiSQA/7O81xZHXP6NIDX12iOAiAIg14P1UDrixklL+0/nPo97bHZMfvdOfLmagX4W6Gy5w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.26_1572570992017_0.9686871482447987"},"_hasShrinkwrap":false},"0.8.1-alpha.27":{"name":"@react-ssr/core","version":"0.8.1-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","express":"^4.17.1","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-middleware":"^3.7.2","webpack-dev-server":"^3.9.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.2","webpack-node-externals":"^1.7.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-middleware":"^2.0.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-hot-middleware":"^2.16.5","@types/webpack-merge":"^4.1.5","@types/webpack-node-externals":"^1.6.3","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"69401c34a7670c6cb9cc411da9ca3255edae6468","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-R8J3zrf6kKUA0fCNPGzF5Opv98QNp2/HKIlRWEMQ33JgX44UraekhgZWAZGoQNLvfYs/Ikx+FGFT9wfwFKqpUg==","shasum":"387467fa897ea5a082d47a88133b1d7b5bb51e55","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.27.tgz","fileCount":27,"unpackedSize":34006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu4i/CRA9TVsSAnZWagAA160P/1YA2netR0svBfQx6izL\ngIdLeluXgNrGBxONRVwPPIrqiY+8pppgc/VF6+R4JEdhPHID+jqxwvzGODS4\nxYBoeDywMH2vkObTONJqiOCfGw36LwJvuYWpIlTVcvqmsRsksnmumEnByJky\nwmT3gFOoG2C3VSfS5ceOh5l4mvhacY+6hwXKDMj4noHHP8j/S7GgzhDjsXEY\nEstHvktFN3R3/U9P7X2GlJsxcMwmpIvamDOgxpcS49H5MuVFeOlN0R6k3H9e\napyjA49eQHJatJKt6TyimcPeCaPTJvL4D2eiFCV2L2LKRM1NcyxkchhH3TXd\nNziIocDcvH5qiRHEWQFnnUCU/KroFtFf7mt5oQ+FJU7ZpwAaqA3o8zbt3aJh\n9l9hzTpILRIFExSAoGVaQghRVcMYXIr7cQ6YmlrS3/+e+mSKS1YuidvDR4ei\nmzGeCmdK/XTS1csptEGun4WhEEzHbSBquPiqX9HJQzTVu8kqiXC5BGWvS2n3\nN76cqUMLpDoIxkEY2r0YWQoK7MM88cSEHc7xertYQY/C8/H4P8ADmmkgoUfk\n1NZb5czI3qFj92XaVghhAGchUbf+sp0eQmjYiVGr1Ue6DoFpJiooNJbm8gQW\nR4wakTtWShCi4nCEBRtUllwPpd4IvQJYUqwfyPYjLSB+0Z+aoGXL+5iUJ6CD\n6DUF\r\n=cQHe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9rayqYnjK6RmGz+t0ImAjhw20/j1fNgYVrvj9nljiOAiAeaPcNChVvl+T+FsXD+ryNNGxOUO1XcYWJI1Tn8A2qYA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.27_1572571326833_0.5895451608944979"},"_hasShrinkwrap":false},"0.8.1-alpha.28":{"name":"@react-ssr/core","version":"0.8.1-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","express":"^4.17.1","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-middleware":"^3.7.2","webpack-dev-server":"^3.9.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.2","webpack-node-externals":"^1.7.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-middleware":"^2.0.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-hot-middleware":"^2.16.5","@types/webpack-merge":"^4.1.5","@types/webpack-node-externals":"^1.6.3","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7ab9fb6a3ba099190bc809d1a49fd5d3c9be1c02","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+W9iRwjKGMdR07JEPfl5DnbdDCLywGFZ3rZXFIWpNu9FQMjP2BrOa6xn+wWt2NcBOqnLk7gWuJAzxOIgcTHUng==","shasum":"6aceb9a0cc3e4fe58b1bc51edf22a1201afe279f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.28.tgz","fileCount":27,"unpackedSize":34073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu4l1CRA9TVsSAnZWagAATXsP/jnRZ04d4CwN52ahyWTB\nKWPwPzYH7s6Tf3kvmXTckYtSvpVsj4TtgHi1thmd6AE3U/5L0c+nQS0BvziP\n2BXHiCRQQhLSIt+VhfdkNRp+oY0vGXa/IaDJxHSsIOWAhpnFsfmMatbjn6T6\na+N7eL/h5dmzefvo9T+zbmFy6EaBIHdHb5IjteL7fddBCYGgtHVNumcFdcBo\nPYqE/D6sFPEZK74TWpJaBL4WpdMVLNJzROuhucA/w67vZmlp3zDWs/22fdEF\nU1vjq3/b1WXB/mRlhoeb9ZfXyWQ4eWUkwGaj8afKgFqdAVSuwMl5DMz4gbG4\nN6OUAsyxi6NtnqeHKeW73q5cH9GONLhRXUpL7gneRJsKXT+KZu6IM7zYTysN\n7yHddwhCJMmS3BcjgFEASfPcjW86VKfd0xeikYwuJSlGJ01j8ElvLApWhyC1\n3Gglnx92ovwXa4GPLBJ/BFUtHrZaF8b9FR+BzG9RE8MezdlKZ2vnZTd1F1uR\nT2c7YSejx4po3ktdg8MU5j7MrlqY913QJXrzTUnrG3sr5G2M84sVHdogU0TT\nlt/xYavmuAe3MQ+s7BzEIqQa7/BKdeMAObtGYxnlefvy8uxaqf/k6qy61YfP\nnPJKPWby6QlilfGeURoKrf+d0/YMrywfXFpbMrm8c6dY4inIOkLhfCgiCh9e\nsOxP\r\n=kn/v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeneDjxA1I/ZfKYtLqfOOaKhXKyYBlt8jCfXEePywgrwIgMOp5uqzqKqtHs21D28+oD9LLsrClOcOC9GmaKe91ggI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.28_1572571508617_0.1498575219680618"},"_hasShrinkwrap":false},"0.8.1-alpha.29":{"name":"@react-ssr/core","version":"0.8.1-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","express":"^4.17.1","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-middleware":"^3.7.2","webpack-dev-server":"^3.9.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.2","webpack-node-externals":"^1.7.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-middleware":"^2.0.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-hot-middleware":"^2.16.5","@types/webpack-merge":"^4.1.5","@types/webpack-node-externals":"^1.6.3","cross-env":"^6.0.3","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b72bc43b0a0e9d2cd149096bf3cc6dd4320d8844","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-cRvOuhedwTjmX2sA3geKb73T5FlFrh9NsLEN8B6h5hgcaIWDwnWhM+yhCt8stuE+XQiw9CFSsOliLlMQHT4KSQ==","shasum":"4e8b26ba6c2d8c38cf4a5b31367f545c2e38c9e4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.29.tgz","fileCount":27,"unpackedSize":34067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu4peCRA9TVsSAnZWagAAWUwP/0/mG50dGG5BMN5sEVsv\nLeUJfMjb+v09yyKkggX2Tkq69EYTBAyeTDOK4u2pHMAtr9/7g4KLfDXjzr6Z\nk6ljftRrBZVv93gTltu7z4CH7k/883x2GXjq9yxs/8ixlECeRaYqDTWkEZxr\nambJn4hRF6ux4eF3UP60urgdXE6aqeUyv+9aUcXYQwfirbSJ7drLcSFXdZ0z\nmH+YereIqhrU6NbSKY9QxzFN7G2dFDWDWJPYeZAFy2PXYC09ro+Oi8mqXEaf\nbUbvr6UBO7HVXg6/ueqyz/fSIsivPZFCTrx7BKpPZFlhC2LdwwLNL1McgzO3\nD2cEtDXlPbWkhnAkjydviFajNp7GTJmnxMy22Wu0dH5Yz7krpD7xmzTJnWlV\nCocE30uZ4GR7sAXHg+xl+yhcoIzqMIpupiJ6FS1JdQC5NhRfc1XGmcokUq12\n1dsLQ6lG2AfeNOCu4G2V2VurNRMi10QRo/VY2eagfqF1AdHqEIHn6qE65Zv4\nWsM2lOYQ0TVk6x6uJcg+/mlETavauIk7KMrPg3gFSq5mSmWyyfCjNwPnd3Jy\nfJw6LDF9Y0sLxp8JHsHaUKJm6wLvuzOr/wnwyCDePH9+gGioimhPaYtzAnbd\nhjG1J0TNmkS7dfjrasxjrLWSugR6jByr3fsAI6NNAeC2EX8vI3+3JSxDpjeo\nRPV/\r\n=DLo9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD11AIx2EHJZG21itMMm4pWfGTfvV0nGV/quTOBoSJ5HwIgEdylmCsA9gu+ANRVW7TSdDvaJTcgRh3W++FbLsXkLEw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.29_1572571742236_0.08968682028394803"},"_hasShrinkwrap":false},"0.8.1-alpha.30":{"name":"@react-ssr/core","version":"0.8.1-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cccf08a80d3dc29f7064d118f2999e74921fde23","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('@react-ssr/express');\nconst app = express();\n\napp.get('/', (req, res) => {\n  const message = 'Hello World!';\n  res.render('index', { message });\n});\n\napp.listen(3000, () => {\n  console.log('> Ready on http://localhost:3000');\n});\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nand then just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nand add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // enable `.tsx` view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nand then just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Features\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Hot relaoding when `process.env.NODE_ENV !== 'production'`\n- TypeScript support\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.8.1-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jvI9/2YWnMVHOkEyd4AQyWnqjQG9I1KfhRksiD1E+lMvIZHj43fYEf6yk1zC912GHb9hGo6355wA4tBXOR0E4A==","shasum":"99bfd3220f5261b9c196fd4b2719d62a01a5fde7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.8.1-alpha.30.tgz","fileCount":27,"unpackedSize":33510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu43VCRA9TVsSAnZWagAAqvAP/RbLUNBVKX6c/oJJnYv2\nRmGRqwchRZikkvE7IP0AxVql0eZAPucmHVZvK7r3jWZrjnPA3TVVBZCxnzxw\nXNamAL/kRd6VJ30lHwznv3eBVeakrMk/+T6U/kzR2UdHK23dlsvrt5itYPip\n+aeI6IM8UT0wqxWOifO7/XT5p4Iozt2a2V7jZizqy3IncIAmlAb0/5OPL+ML\n9jATxFDTlyMv6fmEYber3v9L4t4DNbti8mxMj/F/YuGasBcsI7ajw8Any01j\nJiCfMbr2YR7w2UlL2Vb/giEMCEuV+oe/y6M7w/ZnHopip4L4DttBJyIH+9Yl\nrB6UF7wHgW/rRJfS4W44ZyiVooGX+4R0nF+0pEM/wZpfxLSirfBTSBArV+Bg\nq1ViZHwi2yn36mK/ZkswUsBTQ8E42vq2/C0Ypdpi3S+Pp1khzpkWqMwmpBmj\nhCR+GXCdwPkVBEYh8FW/fDhWxMjNSVlrr9vmgBBe9NKI9x1wocX7cCdh+N/z\n1E6OGn2HdStL/o4ZunEOr7m9YcTtAudjArdT9NddhvOohvjkhtckEtK6LAzY\nKd/pUcX3tyx7c/J5N4zZ4IqqGz1sqqKS+5F0aBX5g5rPgrlqFRPnSbTEEwch\nRzDffip6ifcJxHR2zhyb32xpWeIAekSsoaabxohUr3WxE/qLj65tLEekLI6m\ngBDF\r\n=pNea\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICCKdP1m9NZOIzlMpH8s3jF3IN+zJHmKoX7I46fjRWC2AiANNGTIxN2yHirHJ4SZgnMWIyZKw0it5TSM4QZi2r7Oaw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.8.1-alpha.30_1572572629391_0.9762372050310546"},"_hasShrinkwrap":false},"0.9.0":{"name":"@react-ssr/core","version":"0.9.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9721ff9c38faf27b24718c360d2dce62821b1df1","_id":"@react-ssr/core@0.9.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-wvMkCK0nBAX4R8qNglfPMg7sHBzzrxwpmgU2XXE6hOD/PoVWcjmfFN9+qJAxBw9sQGq42JCeKAmK9vpzoRpyBg==","shasum":"b0e1510e2ba3104cfefb6bfc13886ff40a4d577c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.0.tgz","fileCount":27,"unpackedSize":33767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu5y1CRA9TVsSAnZWagAAcHUP/2S0xxH4JnJNmk7vtUjW\nU/h46jnxZrhF8YHwIPERo2Y2QGnRCeU0rKOPvKZOE3qGrgnW0vqs63HhWMZg\nkGnInm/TIJTrU3EG15GLxF+ATGkNzYV1rxEcv/zlkQSGpvswT7/sLPS8t69J\nZ12KKyAFUFWQU8IOy6o+/jbAUMhEC4TnRWbL1fUQwzYL5btPnzL9gHsc8Sl9\n2orSuYqrdp74U77aekBO1zm6uIT1xuNErfj4AxzfNVVZzL0ObMzsvaihafST\nMjQFtaGXIZS91gNOErH6RB02aDBiBoNLtSQVFvSYTk5nVa3KGzw1qFWGStEe\nl7W5HFG8nRKfWG14NyCktFoA5uG4jmuFQlCuelAhpaosvVtIkdMDdkefKx+k\n1RJcDBUXdltuAtqTzf3jB6Cw5mcOzrevQJ6rOhwXsLF21SFirXAP6IU6vioo\nRRmOPyWQfys4OvH7mNTLbvCPodsgl3Dzt2JkCHbnggQKVCkbQbFYRaSHXTtr\nbcD8C5Kf6kw+jUgBhNyZ974U4vAdtcLhtLCpVdyMh8zBix2Pf+nfI4MWwg8X\n1hNGfWJZfSEIpbBrxIz8ASsDkGq1GVCTrT0CpT7THSd8JVIagfMsaska6l8Q\n2BM0qItaGGcw1YdS9GzaPImhpazwNkxNs+fdfCF5CAGKnHH3douRzdcFzsXM\nrXBN\r\n=5OBP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBiXzwdkMRcAkh9D40R7heAho0TPCQUZVN0iWr4B9gfAiEAgUG0hxX0mK9xS9XUrqP79deC5R1G3IE/QMPpmkISM8Q="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.0_1572576436920_0.4776605326979493"},"_hasShrinkwrap":false},"0.9.1":{"name":"@react-ssr/core","version":"0.9.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"990afe7f70ab4f118e699b508cf22a4c25820120","_id":"@react-ssr/core@0.9.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gNVxuvECTtlNrNvdKDu0NsCw2+q3gbDVr9sWVDAaHAXAVSHqQxDBUKmm0a7ydd/+QkvyR3ml9yscitq4u1w4mw==","shasum":"e9a26f3b482ebcc1e73180c55b5d409591641840","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.1.tgz","fileCount":27,"unpackedSize":33749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu52LCRA9TVsSAnZWagAA2WUP/ii9L5CjjC8wwEZ8MNXH\nnHu1aoPCLY+ZhX5ppk8EfFmC74KhlsdzxeMXzYRtxnZoUNT6d4ecJS+S08Y4\nsv0UWF2ByzId7n7fgJXnhyoZxX85Q/xX7LWvjhwVj9hGhCpzZ24aaCKHzVu8\n+miKoNK5NmGmXGnHVMjU9zV0uG1xp4mgRbjAUt0NNQt2W81juPJFekM/sL9T\ncjsGoP1BSaW0WeuxzHEwghSk+q507VvmAhnqKqT0tf0NpeYy6/NNs6O0Kp6s\nbiIC5+wxH/PyogpC9EKEVY3X+mlX+++qZHSc1X0Kqkh0cEvEtrKUz6wg2M1z\nig8GCY0/OHTkzudIDWkjFqaEH0sUYskX8bc75sizgw6n10P2pvUJE/J+wodJ\n1IaYR2bmGm7xtyHl33TlVH9V9SCortITECgHWZkSZYNL87se1U7JK3JlWTc+\nQ7UkaBH+T9qGx68RTAAAHbok0e5IGhWnbntucdH/hWPL5r8rFZuWSvVVROa3\nZMS5iqLpijAg97ThGqCj9y626wwBh/e35DgQGp9ZcuLSmxiQS8VB9kDzHcxY\nIMWRGGu4rM1Gqiw1eFXCXqjbSq50I0C4Ett8+YR0NQRI65uq5nx8Ma09xM5S\n4CjysRSATMcwf6QA6tR9ytuk/ksDQ6az6rozzWbE2WyjCRdD3qlU/RPkxpuM\npOiN\r\n=Ckx1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDEELOm2HpmTafwDeS8oJozyTP0lwGinSxuFkvppcugAiB0CJmCqPpEYxzGPn7vDf9lhz6+37njnwcgdxS23zFzvg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.1_1572576651183_0.6292505865214253"},"_hasShrinkwrap":false},"0.9.2":{"name":"@react-ssr/core","version":"0.9.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bc65d3ed84938b955b0f228d9dc654a83a025829","_id":"@react-ssr/core@0.9.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-x8AMA46S/XWGksJJHJGjp1ovft4K1W+9gOf+ULYWG+F5MIyDR5CAwrD+lM0yEUciWg81LrfI/urG40mXIItXXA==","shasum":"e4fa0dea3a646ba440140a2f904960626edfe34c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.2.tgz","fileCount":27,"unpackedSize":33570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6GoCRA9TVsSAnZWagAAYFwP/RcgmHU/jfml13jWrVcO\nUw4KUutuS2m8egXFgVxtOcU72mBaf+r5hyWqptv+puFPChs+h6/Cao/hPzF+\nwI8yDwXHzlAb7+sv4GdX96zeXonm/uOQpCTzvjrg1XLbi9xiLx+/H1aMLK8O\nlSkdhQ/kuglZnj5bwMrGpcmc6Z+IIthZjoOxaij6FztJSZlsvQGnD+WfP0mI\nwZqm60/s+5+cT2xkL4m5y0/4R0cyGNsXdAg5byeYZGP+DTBjqzRW3WrU2Nvh\nTK99XsMXzvqjBXCcHB12jGGbKL6iOUOzc3Qil5dEhZdlhWW0qY8h/FkgZM+C\nB8DZMQuydgo1yL5fPQNeF//2Cd6rMdwoSOKESSlbHI7L2xyG66gDLdCy1WEs\nFiQTEsUXlB5QBG/T+AqbSHHdHxkHsBRumIAj00EpVYdvLGldTSsapwvtD7jX\nUTCG2Z+1m/ac/EWlld8pU7qcGPAQ9Xd+u3my4QcqIyQk4frYnXQPTU9HmC7F\ncVQCw/49CQRMCwRhi++wbejTYoA7lc4Ahat9e+hNlrm6LrSPD6A8RivYJftb\ne3s/QEBZBqPAq/BNWR5e+/AaYoWHsrYjLvx6+OK9+oT1MvQPNL2obU8pQ1AP\nz2Rxm2d014HgExOlPBAyfnk/M+DGvM7rsP1uuOQpXa6zo+9A3osfkRoqdbRq\n4arV\r\n=M/rE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0i8qOd05guFQnsqGnQZxGzalqzlLq2URLvO0STTtyKAIhAJ5hEkX4rf7z5GhCkQV4joABu3tKnOGnN0EHQJIzh2wt"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.2_1572577704241_0.3940322178073772"},"_hasShrinkwrap":false},"0.9.3":{"name":"@react-ssr/core","version":"0.9.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"06a3436a70edf15e608d7fce368e8eb8ae86c6d0","_id":"@react-ssr/core@0.9.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pFDfiCBEQ3zjRs5t//UFFd6gesccheC8yz7LP6yJZ3D4EasM31Ylh10vcavV+2Cksp1Kx7G1rxjMWt+leERYuA==","shasum":"1a6780c4e62db8ce5b8a2759340bfb9c8e8b167c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.3.tgz","fileCount":27,"unpackedSize":33643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6QPCRA9TVsSAnZWagAAJv0P/jd/Jz+mo9s1efTdbvfM\nkbUbdUedMGy7pPTpRfiJBKjRcj8DkSA2OihYKrD8WTzcTVNbMn5SHOjE1L8M\nI5qIzOYhNNVCx81erFK4ffq9Pv34QK6qA+Wy23K+lIlsbzXQfQ/kEoBw5AK9\nvSY0FLFqSyeZHeWuDzJjyoXCd1/Pot2wYTMGfGEpi/K3fIoAWXHUGZfZDkNn\nZ4qfPyFOdl3StmI2wnqw2lCJfTJUrUqf75BeVFqmtG4yJsdursfCnoo8JtAz\n7S37AVK/m6nfff7SAX+6+xDbSBXkGjgaWySPbR+tvDeeN+Y1fSzG1daRi9hH\n3wV23j/rv3697pRF1fzfKVQ/tAJGOUwFAeJza3xPyV+SsIo3YzXI0sAIr5uN\n5ryBOpw7eAXX3AeTj7Tu0dwRtgDd54auhylvjK55o9MF/aQTg++BrwC0kGR5\nOMTcyrAsVWUSieFFSPdHP7A/ZuCMiOzRvPA1NpogL8id9mEU3MYyXYIGFk9/\n9g238eC9K7jDAWsnL/otQtFm/qN94TcoUlJTqeQUFSvtMBaINBR6z+Bk25DB\nkWLWQgdE99stv5fmhEv13sPhdAct/sEmZ3SQhtilH1ZDfrcfDCQR54kCMsF7\n4kDNu4zpGCpGDNgnPrazdE0DMcV1Pe7xde1NB1DmobN+YJjhuDsu/rt0mJXW\nFCsS\r\n=RJp6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRszySNymB+yLb9c4UDfX3iFoTiPSNsAWjF2ZZA6jVfAiEA48tDftzcJnVd+o3yybPRssWUaQDQv2YXp3/XXoeVKJw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.3_1572578319427_0.8847969942126568"},"_hasShrinkwrap":false},"0.9.4":{"name":"@react-ssr/core","version":"0.9.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"47df35a84043490e405f782baa6b4967d3fe0190","_id":"@react-ssr/core@0.9.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ajJo4L025OGhRkNkFW9rqQgra7sSNNIsvYlXlqyG2a4m6+IdoKiuQgW4Chs909emfbGZGh8qyIobOGLpBRL/pQ==","shasum":"f2f1ceae9fb17510c15010314cd84e458bae509d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.4.tgz","fileCount":27,"unpackedSize":33564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6U/CRA9TVsSAnZWagAAn2QP/RRQ6F61WI6Iues0QE0l\nF/MxXYZ+8e/qrawSE/gZwYm/naiXo2tiWQe9Xo6H+eoxuKQGemgkhrU/EPJO\nOrOMmhvrOdkHX/755YDzqXH4BBzD4v2kIXzuYzqgLunDrI4SVFhBfiNnS6cz\nj8oqDoiQLIvVCNCxU3pKgLbl/QJC2ccr/6mf6Dij8OEhVbpsbQOn+XrOBOkz\nHcQDb/AOwKNu1rNN9WfFGuNLSu7GRK3O9gtkx0daMh+ydDxXNUTqkUD1sTaB\nhxKWfxpWbc4tscKdtbmO1NeWZQt0MjVl8XOZVCMpR2koGxplFnURxLJTzHAF\n8yRXRx20Ctp5a1+4dcqNcrjSw19QL3vhHiBfJoXw9ph/P2F5l+AiE6tARV2X\nCgi/Ckoz1vs1KKvEj2aB5VQ3jbQKWq6oGECYkvlbxqqfHSwpTwNYUK7Qh3Pu\nru7rKFtdWXdI6JPMYtJhvSI1QVnuTkNfnZIDvE7z10tzc/ta+z0oMhstBu1W\nkKNHrjGFqzf53nhfzpZtiQfurOk4oDexX96xMCpuOZ0hYNDacrRRDnRP37iq\n47JDhtd5bLXJMWExiJWxIinRuQhr+dtq4lE4v6yCLr2pcdvDWlrRfWRp1jdR\nMbl0qpb5XOT9CPwVhLb9824FVljvyQX5Rtsyaqe7yWyalvzjyDYJLAPGPGhV\nJhKG\r\n=tBTt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCacxNrsk6YFff5JgQmjuDbfpdnnQFQAlEiJQDtJI9JpQIhAKwKGtC6p1yMMU2sZ5t7AKr9l38RHhTLSub1JJnXwmfI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.4_1572578622771_0.11622203237101014"},"_hasShrinkwrap":false},"0.9.5":{"name":"@react-ssr/core","version":"0.9.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"22e321834d7f60f9a1cd8c8d9fba93657919436e","_id":"@react-ssr/core@0.9.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-kvUPcyeZJxGnKFDIBsoWVztmrUvPpuMvHYxfotjYErZmYAHQ84eK5tzZxTnfOGhi+86SKvEEHPZZeCBWzkTWNw==","shasum":"58270050747008258777bb893651a3aecc2df7a9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.5.tgz","fileCount":27,"unpackedSize":33540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6XXCRA9TVsSAnZWagAAzzkP/2klyQwK/Z0oT2vgFhHH\nZxdj3HfwdjBQEPCEeeRWZT8PZLicU/BvDUCI984Q7qmu70HJ9/H2VBvFCYhX\n6m6ekOU7TvhtahPWlNxpRv+BPAUuiILqVrLFAnRjDh27EHVT73JYX2uuI7Vv\nOjGatsyiFe68Kbl/it4BTU95/yXu98bdeAMgUNo6AMwu1jIh+qLpUb+ky1OY\nS5rg76eKJm+hiCKSYvPXpBbB1Y0XYgnix4mr666MJH2pW+CmleshTKn/Jld3\nRWyLRQLRJ86khjn70upMP6E9sXWfdNGgq0nBLaNpauVJsVe7NoxOU16ah9l6\nu/uGwhH5lPM1RIwDMPiOU557mu24FDQ70Hvx3caUypD70sM9JJOU4qn6jekc\nTMIcH76AM6sVENmFoSbNRjfsagnj7uuOOYXtyXbVMGYk842sey1zlMNJCuk+\nz4B07auVIY61F0edglmvvxpnSPmw88xeL/zoE9fm84pspY1eNafgL55dF+wX\nTY5ecpGkLkP+rI7h/eLcLNHolNlyIU7501HLwOCSCySqh+IOqrKFgaVQQCXl\n16semKwic+r8/kBvFWGACFiT5qZisYcBs3JbLdArYtO8O8qFA1xfD0T3Dsx8\nRL70IPsv5WtZVIW5MzBy11pmzNorbSD7zzAWvXktZt9fiC4vySva6mNfgZnc\nzXZt\r\n=dpGP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEs91JxEL62+zvUtt4HardDXv90HdrYsyiCXUMwWPg3rAiEA1WFITEi6Lh/qT9FuR6lF6OEYnbInz0EmAiwUrGbnJbM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.5_1572578775529_0.5209581585408338"},"_hasShrinkwrap":false},"0.9.6":{"name":"@react-ssr/core","version":"0.9.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9ef57306f13759c960a6fe954866eda2f4db32b3","_id":"@react-ssr/core@0.9.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TRJOOl2eK1lVttaDVu8oGT2tsSO4mJkoNqJui2C8m40v+WCNpDUTXJTDJCcLVEz6Tl2ayMv33BYpMgz9/ZHiYg==","shasum":"f71f6b092518a3f9c3f0d069a2284b77cd47666d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.6.tgz","fileCount":27,"unpackedSize":33578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6gzCRA9TVsSAnZWagAAP1cQAJYBn1MpFj102y7arEaA\nNAYLomvzwVTZ9oPRMGYv3nVTACSJ82PPu7iclfz/4fbhk2RAJ4jVuSQPMuzo\n+CpOTpmwJxpF353QUoHYylswkX/+dMWPgzQs36YWn38/pV8/fyeFPehdEyyF\nRxITR/cYYHrLMe2Lv4r5R5bQc9bXl2kwdIb65pyjKPL0XPyIK48C0gsGDL9T\n29QE0bOiNvP6eP/8Jhyse+93rCQf89WYwGE1yMkOjZK1j+H3LoH95/DhGgkr\n6Wy6ZvtxsJGbasS6fWy908jcAVcuOBy9TXsszdpJXoUPDvnILkMDGwWp/WxY\nwOVSchJs2gc2X3orNKmx/R3LAAe1OmjP8rdhRv4oyFxU+noi6HC0grmICbaZ\n+sSzaDXs8zY3/KzLyh9by+KzPizWVZ/Va3Cw5gtRnqzk7cjBqQRibk0KceCY\nKvNjvk5V9Of9KrGZ4P1OSfdmUi8urV5dm1ECGHE6BVw5GP1Vm1cfzHXiEYLR\ncS978LcYGJQAdFOlZbUdqqmZnedyiW93MxKtmHrzkt+wA0dTSMMyya1tH62Y\nhszf12K92B3/BP2l0zldgxNMaCjL4qHGJ30va7a77luUWgYisTRN9EyUDAWT\ncVnJRYwTspa6iFq4dyOv54QgsgdgEBA8o0o4e53oezQACT1kw+7ma1myzJFT\nkge4\r\n=lAwE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZNXk/y70H1IGWrWi24L60oClec94Ko0X/hUQHYDio9wIhAKTSILLnjw/4wUJr0az2X5688ZGwkFBzhhoOwm9+AUBF"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.6_1572579379082_0.2614084023966703"},"_hasShrinkwrap":false},"0.9.7":{"name":"@react-ssr/core","version":"0.9.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7363afd72f145459214d48c2805ccc2b69c391cb","_id":"@react-ssr/core@0.9.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-kwC27A4WmKCi1y8dnvYFqCeje9AaYyU/sC1XsEhCmdKEHXvPGB6OV0hLBrDh7ZWOmvXeFuzFXTQLobd3hZiW1A==","shasum":"8d1fc607328e2874e5e22f4e028f6b2d93d4c92b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.7.tgz","fileCount":27,"unpackedSize":33616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6jGCRA9TVsSAnZWagAAfkwP/i8txrCyXOBhz1Ar9OzE\nBDT04wHXM2qj4dYIuhWQA/0ARAcN4xcx1athYBDI8lVriG7loKEwVV6VVTdi\nHA8T8cXK6z8mtFUIZWTuqsHbLu3g4ZjWgYA/XmMH4/HIDKaFSPN6MLe0rrq6\nW6EmYkH30Kr0Pmg/TpFvzMdEKLpDFkAI4Vquf6a2A1R30t+4Rc5P1EYHp67a\nRZ5aRhBApNKGMJxvRVFElZRhwjuuB2GNNSet0zNMR1EZ/laotBXmajpRK8jT\n/S1Py0um/oYiK4XMXqyfiVQ1HEmkV+7ZLxCTc3SVrsNFH64jZQ60iS9o13TP\nm03uIYwVF9a39HC6zpRlCBy/ZfuI6xwptmypHdU1dvfYYHxHuxwtHejz15Gf\nXY/3RBCvFId5Kj8LrUfalVjaCXcMh8HEWqADuFJB+C3joonR0cU7j9WqLNSj\nvKfL+jDen0m1GUTqDLAMb27Pz9WsdyXq0u/z92ZploFKjscqsh7gAKlV7VjD\n2Ok3YaLnapg7VouCQNSdc8BiAp1neEsSfUOlID6vEYcAAMVXmve/zD/IQW/r\nwrhz8kib8r9HUsyx7jXBO+i4q++Wnjpe7vKnVFSVh1+Jhkv7DaJi3/7vDVmY\nIpZFijo5IUAMdUD8tFXaQDf3SWIx/2pfqEcFu+6tcxNb2CIjl9UQlGmfPxBc\nHbqD\r\n=MWjL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDnQQWl9tm8KW2wN1IohW/1/9oBQ1e1FP9iC3iyGr8+AAiEAjfnaevC/jDUiICeNv0k6JPQrZJP08r2e9KxR/qlkCds="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.7_1572579525950_0.36824124208364917"},"_hasShrinkwrap":false},"0.9.8":{"name":"@react-ssr/core","version":"0.9.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1c9395b1c24f94add136aba8970509c335134387","_id":"@react-ssr/core@0.9.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-me+Q6FvYCEKEchTIKvuU3nKScSfJMqnzJn985LyHMCbTMmtmUM8fTyu898Ph0MUvbKh5VTdSfmle5O/6yP+X0g==","shasum":"6759842b92fe83c26d35807af1a6e6504980db6d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.8.tgz","fileCount":27,"unpackedSize":33688,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6osCRA9TVsSAnZWagAAwbcP+wcdG/KwVWHqYNV+sf1S\niNoTQQ0FHwjLXxPJbWaHyIWtPWDgQxYGLclq52aYMslFcrSmEYAA8ldtt9wU\n0pscpb/fsvDBH0Oy+a9QJE28ebihfVS+lAqXxKSykGaIRfeqkNvNGBR79Rxd\n0CBUhm9WrnpPEavegHwSXP4nr7dhL4zVt5+w88yjgamgc0S9CsGuNmXATXQK\nv+Pa/uc/ywb96aHSdrtcjks9Pg8BhHQqXKbESM5DGMtNaQQ5amNyZ1BYAlO+\nH7d4Fksj0t4Qra80LyMfgdiFxz0vvVtA1cwHt4ctfG6opFtkx3udPhqfl9zQ\n2ShO7Qq+Gq4lI1Ky4YQ30UeJfvzz0v06VX+OcjJcHXP8jLxVYtRc+rYPN57c\nnha5CmE3z+B0KxCoqx2+EGxOwnKfV7STTolSVbyWyD3x8jOrUiIBdJrkfmkV\nAcTIr5dIl4nh++sT1093JInDgiLN1QA8Yp9fOzbYLNI+iKdiIxGVnCSjTbzk\nllC/2MA0R1Gy86BmYAHpdYnmFxctnJpFiqx4t9uTxrG6jqq+LoehTY9imRCl\n9KPYzDjCxKFr/MTXuXqqk/iSeZR34T/SEzJ/4SGSD0ChNwRT+GnVha6o10CX\nf91spQVVSgugveRCLHONFWSR2svED72A6c0f0MyorIoW9b+JB+Ttsfpwpan+\npBCy\r\n=5NiM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+9TY6VgBd+otYriqPAELyPP8XuSQMm2W1iWO2hW7+rAiAL1+nztBsnQL6V+DbW5IHAH3QJIWOyKVdU1RKtocTQFA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.8_1572579883951_0.6803203375597944"},"_hasShrinkwrap":false},"0.9.9":{"name":"@react-ssr/core","version":"0.9.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ef66d459fd06fd96520425ec00659e6b4134923b","_id":"@react-ssr/core@0.9.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DX5TTPVAtCQJAFMaQwYQ6XJb0ukU+zU866E36OMRLNBa8/dMjU+TF00P7OvFyBAo6oYlYtWTRlgy2DyapG5wtw==","shasum":"40e522454e3e980db2b410aaec4b0b8773964ca4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.9.tgz","fileCount":27,"unpackedSize":33694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6qyCRA9TVsSAnZWagAAVRgP/Rl5+3SD+k6U8ixs0WoW\ngafzDXWVicq6hFh50dUwVRQBWOup7zWt5wqZNbROukGg7DAQflU/1aLGCMu4\nlVCOvQ7KVxc5G4NjkGOwdk4UnkT6bUa8FB3LeD+m/yQkvNaJ2wbDWg3+/o4m\nIByvdLP/6pj+d4gThOjSYBmXLzi0vj+AYti6ec6s/MYlYIp+NEQBD3v3/rH+\nLxx+4treMxGFOnXpUQSjvPONSMDWi/7lLDiG+ckQUSg8r6pq8Zq+YzA7FmwV\npqKZRDwLEt2h2jjCY6I8n6Ru2OWbi917bYXecbRJr4T69TLUUAnwDvDxfUfZ\nQXCOibO/bBQGW48s+EOBG73IeLPuR//9X8LqGLwJXFsVlSjru//yDKwB2KMy\nxiVWipopV/gV65A6HZmuFTHFmEsW2J+x5M5Dk+oA8sRU/O8ndfsNxrSPlrhy\nhmrzen+wpQvNxFiXhoW6yGXI2vPRyFZmhrztJk7/BPu64c1fD0pG+05aK+S4\nxveIIY+k8jCgFHcKve49MnM3VY5fU5Z2ADu+Plf8L8Fdl5ighbY2MNOpiaRw\nnb9VrVtQLkoVnK01YbUWUWQLuVAvRFtLlChiMeVC9vLNuFxxc+GY6HeN56BC\nWvEA1WZ7/OjTTcEGJQsHu04AIV7Tb/Bt3gadTXpKOMDjT5l9GABHhznRGE/k\nA/Mh\r\n=jVE/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI1MkJzUIs/CI0SlOvoNqdeN1UAU5pDOglLQdpGaaS4AIhAL2kB4BAxEySJggEqDVW6R91i9AEYEWBgtXiXMyFeZ77"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.9_1572580017940_0.8776566678829381"},"_hasShrinkwrap":false},"0.9.10":{"name":"@react-ssr/core","version":"0.9.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a24d89261f5aa9f1824000158f3e946a0c143b7f","_id":"@react-ssr/core@0.9.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-o3mbDJlSzkDxP3XbwRemVhSrhpBD+dcVAjnX0Is05cRFqicImyXZSqMEgeR4Xf5dCb5I9o5S2ZWbDTDhxrRCWA==","shasum":"d06790f0e850f9d76cd62f9d68414937fe46b1b1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.10.tgz","fileCount":27,"unpackedSize":33659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6v1CRA9TVsSAnZWagAAhnsP/jnr0zkmPy+dQPk1pSoT\nfz+pBYPLKHjxUt2IBbjG7TyrAN5Of8prb90V0rfioAtj5eDsoQLns6NL5GPL\nH4BBj21/xyAjQNWinuSSEdJy4Q5WLGeiT79HRhqMukbDovnNBWjrWknc1DD8\nk1mgGY5ON004rHxUARBTFnhtYQH5+mB7rzxSkxUntbKw6g8QK6xVYZzEYR5i\nE7yIKsSNXfdvzc53qzyme86LJz3ipR/Zz2nk4xN7HwG6pdtJ6x2S8cm5YA6v\nizBYHAJtbEv37Iqs9QRlVRlBG0Q5Dp8JfRbuBBDVJWhxwlhR89BKD7LcJI+r\nW4pQl2FuwLN4I5dZocsu+ef7zHDMvznhYDmjYJ1lwM/kZiZpn+uKR0MzcbFp\nFP1uHi3o69Tn4/pM30DIF/ZxtcCcYCE5rUcU8MbNtrMvYx3NigidfEW7r0yF\nx7fnosfYxIz7BVZAXbq3P19GAqw88D6EJmSNOctfp+CSjaG9r2cL3aiEEi/B\nhnRtGu3JDt+9fxh6gtvtyMxjuZbviIFpN+V/rYTuXNljB5gjynlVmMalIV8a\ntxDUrz99cpwnfWXwTIukS01VcNYX58Wh2sP1hRB4RKkYNj98unViRFcaDMMg\nFdj4pwmKt75LR2O03U2zAYdNoY24yFOIWjrcA5kRD2IbUkwNYK2Bzx+y3svw\nGEyv\r\n=SxHG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeT6Pjd2cg3S5n31Ga822d4oVBkbTXopWowYsDi5uBnQIgNnRTjc3Ql6zFj3XMoFVYdV358bdToJEX7uwbq2Ich04="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.10_1572580341378_0.8939183355937004"},"_hasShrinkwrap":false},"0.9.11":{"name":"@react-ssr/core","version":"0.9.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ed535c1224ad13647688900da2fbd1fbfa1d6f5d","_id":"@react-ssr/core@0.9.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FePj03nnJ+M6E/N0wgxm84rtDyCFoyPgIBmSqTJ2/wuUEOqWSILLPtN6xdYP+m2L8J29+zf+FEB4QPfbUsfzvQ==","shasum":"ac1eb483bcce94a09b00fff743634d5be165a226","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.11.tgz","fileCount":27,"unpackedSize":33665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6xbCRA9TVsSAnZWagAAbBUP+QG6XY93SWbVyFrDfZzn\ncVrtMvlqfQ/ZiGLmSsgmvvIabo0MOnIONeEaGFVOAx8jYX7I3zz0fpVX6YbM\nYiCC6av7f2ikzLOFlP2oB/e+P4gHVhif7x9rR1oD6zUQBRnZw16kkA0Ho2ze\nD2w/72J/tdJlC8SdcNrN/PT0sa8j60AnTsGzgvwoqyQvXR0nqPL5INieiQoJ\nmkfx0nWYKtGOL4mbEdViItdJmK+YQHkAgkFINLI4VDCvEdD8FVdWobbElHIM\n3beSwkECZ2krXe5HC0IDlFOVhDSEPag/1TO1gb9MPD/GFNAX70jYADrQirah\nk72EeEgdZbwXysSRtzu+OPqXzWlSlG9JoJSP8GoifSs9GtuGkUe5/R+Tl2/t\nxxJuymHujpu4In8Xbec11xy9OOgcWN8Oz9xan2m2GuLwp0lfFmBXW3b6JHou\nS9k7fq3MX+d/c9vUrZ2imRWYfQccXv0ydIQIBmaedxYCnVuXjY+61v6xLWzn\njcqNzcIaMyFO6pjoz9gUzWhL1KrFJDcbaIibDZxWIfno9vKlZyQtXJvrFQZ4\n/MCeVhptoYCC3g2sks5OwiRIB9cesLVhTOX46jrytQh8Y4mRtQvP076AbWz6\noZ7pGscL/qKT/4JmM2PQzW7vDPRADrwiMOUAzp9eWHRAgWwKHWTq5ok3RXHq\nfCe3\r\n=Hhq6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgVzCTNVOiw8bkTR89ujeijlkUbj9HipWte8W2PdStwQIgHE/OlQmLI2rsgqq+uE/Cd57a1e+4bUVzq2JDphTmlOY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.11_1572580443423_0.09537693264689207"},"_hasShrinkwrap":false},"0.9.12":{"name":"@react-ssr/core","version":"0.9.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b3fe778ac6aa7400fd581916b2d7584cc4c82ce0","_id":"@react-ssr/core@0.9.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lhOuaW5yeJFIE6JJxRCfIFOmT7vsey4BlTFAe1OX90zl67F5Nz17Nd7sfmEqOf34hj+n/+4NuanGbMd8/VV8xg==","shasum":"67766dd507f61de50fdd71363b0dba4442b6d27e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.12.tgz","fileCount":27,"unpackedSize":33833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6zwCRA9TVsSAnZWagAApuUP/jg/KIAYfd9MxccF6rzv\nR2e/DIyoTP7wDyHXciYXb8u+LEli0IEoR37mSpicxAPbrooewQBPsrcnwbo2\nlaWvr9Q8E/RfIhiNt+ZYYhKDWE60+9RPSem5zuol1AFLQtqLmaCyntgsoaVb\nZeRiuzpmAfyGm9gscAr2vztnGmPlGqnDcSzo8ZB1IQJkURrVhRpVOjkMtCTB\nvF3VErr+8N4KA/kRFbi6vR9HQ3YnNlTT0KS6EiemjNr/x15OkGdj+kxbKV9g\nl+lyyDv93Ptz451gmYL/eKQE8lWhED4UdDds2X7oTTozh6z46i2jcAv5LXUA\np1OfKaIQ0WBREcAFeSQPMSDAgaqdtgvhhS8RSAlwTvn23X5cXWXJyPgsaV9e\nUYzC0NvRL7MNJx01i9RsMGxFtsYUsk/Rg4DcFTOrzF/R97BQEx9T7+f+vl6b\nh0uMl2BdIhIdoVtKeDzq6SmuI3bks8oyyMlqgOPOVB/W+Riby5aP0F2CrB8Z\nREup6setrHZufsCU76+oR0628Jbz43/X9YGr2+olmTYaERrqiXRvqTZBd6cD\nmqO3vvLFUQTVK7G7u8qDLJnjxaGo2bn7nmdoG1gU7lbW6THiUV6i9BsFrPb1\nW59X93WHXNy1sgcX1OVD0B7nptS6fIupaw9WY0SpStfVh9Q0QOWJxa5RpHkn\nQB78\r\n=znWZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEEC+9pQbYubw4hCN73mdFoR03PGtEvu1W1sMCeWogYlAiEA7VHhrOM/pC5qVr6Zx/nKjAmDn9Bw68xT9zMGW8JRdbs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.12_1572580592258_0.24182479368857268"},"_hasShrinkwrap":false},"0.9.13":{"name":"@react-ssr/core","version":"0.9.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e5d40e6fae77dbf070c1c2984861fba9342dbd1a","_id":"@react-ssr/core@0.9.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-tDxNgVkC7lrkYt9z4oGMT0+d0aZ2Vg7Wd+u11CA3G49g1eTlBbIImpjfMK7Y06gLWNvpazKhjQzlwB3LvzRlfg==","shasum":"cc9c16910b291ebd1852822c97ac78b13c1a8a72","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.13.tgz","fileCount":27,"unpackedSize":33671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu65jCRA9TVsSAnZWagAAgEwP/i5wL2bRS+qJE1THdo1g\nyzDfSkhEO8pUCA0VVtgqwpmq4u224yrG4ITuJxVKKj1fQ31tS7gSvfeSvz6U\nWWMnTHw0dOyiR/DbBp1FrE2yzykGmVzRgFtbgCnMFlRkPWng3CC5E8WvbKww\nFci37qlDfzKFVjzIQfyEYlLtcdeNCtgYefUmklPsUPzC4G9F++g4oNIzea5h\n9NCDweaR6prqcR9IoPIxfgbqxi/p2ikQsAgOinjErH8/3N5oOLhb1Vjo8G+S\nnYZE6yLwzx8n7AX5GKe41av2NNc5rEqWec9zT5mTmK+mOLAm5a2jDEuPZ8Gm\nA4jXLOFlrB9qnEj7br+sXlqW5MRAKELoeD/atQvQYbazskwlnLKBNYS5Fg+D\n6dOyGHUiJWlhbkDAfMTZpPbXLCJED2c4y9vf7N8Zy7oRveBa5QwSogUpxvtw\n2cVktBtg4RBN96kDRiQQ7GS4YCvG3tOtE+OXuMVzhgq1H3QQOJjpvwEo0eUw\nNJd//NBcFPxIZMErgU2wP41rwekhPPCGKuePUdoLFmgP4b11LRVKG69NcC6s\nwuTcETLCPKidM3r1U32jh9UgvPEx85eh+QfxbEtpF1qP2EaqKh/KU9OGcoB+\nE+xOEWU/Ee2Pe/xMW3SMeFgNnrqvbNi7ulHD5VdQ+VLFDfikIxU8oBGv25Qu\nhoR5\r\n=GAmQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGM6Ad2gHTnuNL68lVqLASNo3eAZ0md4+bVRhrsKVMYlAiEAoH22+9W0q0E3dgmI5rAOH6uU+0ikfcwfGv3o8NLA7HM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.13_1572580963475_0.30894777247662875"},"_hasShrinkwrap":false},"0.9.14":{"name":"@react-ssr/core","version":"0.9.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","@hot-loader/react-dom":"^16.10.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-hot-loader":"^4.12.15","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.11.6","@types/react":"^16.9.9","@types/react-dom":"^16.9.2","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.5","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.25.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"50895251cb950cfa4ccccf03bff43011b4303e51","_id":"@react-ssr/core@0.9.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-381zqRHesVLoWnR23o9TgS7aZxqwPD5TXIRbZT6ZAaT2++I9B4d4CPjjNCk8Upk6jwIEuTjBJhep0dNMSvNGpQ==","shasum":"b1b18bcbe7a54444422cc5cb37e8c8e1c23da06d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.14.tgz","fileCount":27,"unpackedSize":33574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu6+jCRA9TVsSAnZWagAAFaEP/0bn48uEvLeDZuk+lB4/\nJUmGsyoUiuYa/+quiBQ9H2iJur/95WwTo3OTd/V6uRe8Aqwg3s1eYHfS7+4Q\nbQ9YTvd3YYpZRaEEpnpPfllfFU8Oca3OODu1OohEkE7cJZzfreyqeXQGY3vt\n6/z9g2WNMgvXmb+ybU9bsT+ohyDJdT+tZhyHYN+t6UVgIMDQHBEL63moZrWm\nKz2urUJLHVKVHbAUzi9Q3iDN25phvENTE84R38kUnu3SW0BXGj2ROx0JtlNa\n2S14TkU1aGOppvbZ35jBStxeAhBBrPQNq9xgOTfx16d0IQqGuRpeAM167PT+\nqOulje2ASPA8mGTdbQpgLxX09xixVWxpEB5dA/SfRn9I8UtT/iDAwZskBbAM\n38VkiGIPrVgTomAx4mefn5E+e5mOeQZL7rDQPlwJKhYkij0Fv1paEUiJzFV/\ngQqbiEKZhueFBKsHFaVDww0iSstwNh8OCgRtsbSw4CkMb+KNEuo9u3bJKQuK\ngqvWOD9auked724AuJIpE1hzrE73sH15hb9/91qCsDOfkDVd02o1JyWQ8yCs\niWsJjjW9Xhlq1xF2XFFCCSehTrVwb1WMqkZ6t6D91L9jlhZBdqGOV+8hzkdu\nNoKkzhwxFUMZK3uEdgriaR1OThffQICvucEy5yhaK7rOnYIlWL5wNX+ypkV4\nU02i\r\n=0nhs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXCPcSi7LikT3InHUe0s/HK+dv6nmdnUHPBr8v7z5J3AiEAmOjAF6dYbOgzdgxpHuNzLIuUPBuVTLl2RPtm1UcnkKQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.14_1572581283419_0.9477932487527589"},"_hasShrinkwrap":false},"0.9.15-alpha.3":{"name":"@react-ssr/core","version":"0.9.15-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"898bdd3d06a22412c967a54337bd8b20a62bc6a4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SG8kou8cvj5gPGFiPGoadK/HsHJoSgc3d2yxXanj+fWmfB+FqURD8Nd9eEJ7JBMIzjOAGcs3eTEVGZSyjE5sOg==","shasum":"2fd4ff7a2de31fb29a0869751e3bf13bf3413620","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.3.tgz","fileCount":25,"unpackedSize":33107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8ALCRA9TVsSAnZWagAAWYMP/1Loq93gaGZ9u/6sYsgW\nI6XduBVl6f0el0VIPz7Pchxiyg9iARZLMBPm5KK/GtG+cpkgy3KLFyAdGgJh\nWn/Pnc0tj+BXseHIZdub2PpBr8tXrRWVfhlw8csKKw7essLR589iJuS0tBbS\n39B/KnxSa5ByRldlR0lxSbvlJaFtmTyqjwwqwM+fSma3hPVRs5serIJyMVhC\nrUbW2lb7Zlp6wwDDWDt2TISt7EoSO/7OibCo6R4ptdDI1NUZmw9N4iU2thYv\nXFLzWm6UXrmQ7S0gZHkJUBuY9RKUa48NH5aTM8qfH3BZ+7cq0+sbD4XQZnAb\nd9izoFxMvinhb/WFJbM+1w0/gwiVwLM4PxJBUoUZ9s8uuWs6ov+MnCqo4pLc\nbFHzKq4BOVV9FGrYoooK2jIigb0b59+3JTW5YjSJzvXwZeR19/Vvf8Bcpxdm\n2f1oePFwE1PSCyDE0Aq0AluqMbO81m/2JP6/qANMtUv/xos5VZdpHlgu3ElQ\nTSq6jAfJC/sbAONkC7EZe1+bZ3u/yS11VOCKG/qPBYe5p4ekayn9Ezx9Z4U8\n25dSwVK0eJyHD0FmG51cazvxYbDHrwZ2JYzs8xdFVxK83Qh/0upl691wI9/g\n69SUfq3Zd3JT0oT4/m7mkSVhj6AmCjiwLodaMLLx1Y8GXYCfVutGfgDwISm3\n2H98\r\n=RISI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiPCJaRdncZkeNTkI5UlO++Qdmoh515w366Jscp4w1VAIhAIJSQ/JXFxzWsq1G0cO/NXv2Fre6T3GIkWZorqok0ItL"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.3_1572585483116_0.593328528568805"},"_hasShrinkwrap":false},"0.9.15-alpha.5":{"name":"@react-ssr/core","version":"0.9.15-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"daaff30d42cf62d1d35e7d1b56a56dcb5ee59ab0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-b+7FuUbhy4Pe6pmuOze9IOmShSNcCOoV7nTx3H/3DopRzjs5b9800VpD219cCMcDjUrJiW2Mt8++Tl5JIwpY1Q==","shasum":"396a84ec0ebf7f03e0a8876ad03b1755d04122b6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.5.tgz","fileCount":25,"unpackedSize":32948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8DxCRA9TVsSAnZWagAAhmkP/2qSnjfkPtvdRV6ynmOH\nyEYNZZVvK2p4dEeIYS1+aJrfSeOpIFvuRJjuglW0IuGPENXjCqeWjYX+G5Yc\nS7b4aOes6EAKAfUMi9QmDc1ach+DntnA9Ppw39onJGzNOR9J3R4GI7gH0/4P\njyfOl4vo3fdFSQos90Ig7oOqlY8OHCO4pz9KzpNwdhv2waW3+kC9eYRQPmfO\nlkJm+EFr5RgNyH1xtBh/BqJCcQwCdZsFNo04MZ04/qVKthc16yeeT4tsvi+u\ne7vvUT/0kdHYjrIvGMUcSJaLYnWe5gaunJnm8tsU6U1bDjAuPkWgpv7GMUAm\n1VnI4558eDrhbo3c10jAJ153r3mCuJxjGBqOgF/NJPHl9f38gjEruSm0BJ8/\nGSC3MdNbr2EkIyNhq5KECmnduqDAKlaI7BmkSRU1RBC6ci8TMZMn3t8UlS11\nBPEZZf2CKf8fA3KmPbfZTcN3GjkoanyroMJiX3/BDZ+mrmXMsWQJQSS1dMys\nxHYCXwKk8yNmZ5J2WutMeGM69KtGh1KRDNKuDnSXc7MlJoVYTzZYa12dAwiN\nofp/kFp+++EfNVMN7ouCep+3Fkhcuug4A9bQOQFKKDSuxtvo3SBvjn2KXd6X\n9qxUmViB104Hux07g7DPyoP6GWgZFv+7FzrEeKorHrSB76fj1pMlnSHiPu7f\nyXcY\r\n=2nIF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANZcTPvOXu1U/WXQWRtPecpu5Bgf42sIENnTUfSRodqAiEAqIsVG5dflvMIsjb7gd7MKzIG3kOEFm9H2n49HFEKnN0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.5_1572585712635_0.6498674407676108"},"_hasShrinkwrap":false},"0.9.15-alpha.7":{"name":"@react-ssr/core","version":"0.9.15-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"98175d315bf6bccbc383694adbff086332e14d2f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-96x7lgg/rgp6djMZp7GncGrVxgvMw7Ny8JiSPw2GnSbJb8qvUYSOLjHZm3Y1nWnZvUXMapPheVV7vNQeQP7W3w==","shasum":"42b635b8760613a4322ba5a0cd551ca4c213cae5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.7.tgz","fileCount":25,"unpackedSize":33022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8KgCRA9TVsSAnZWagAA0T0QAI+GINqP0eHLY2+6oVfu\nRNUMDVjN1E7qKyod7fXUpfPO4LK0KtIyJZtdEYhWVbkWMOrrD4mzUSLfyROL\n7PT0Hs/Wg/OcXjuYWDeVG9P8ERguLA88X7E3joVrdJRJ++qszJx3IBfPtjYC\nnpf8RO8lA4IXZwKCARsoFWe2oPqtP2j0ifqbkoBea7Elsw9kDLH6cYYKxNbj\n7P0dP7MXYA6l46AoxeqFJi+Qrdg62VPRdHgMGqgigLxiG5CcNWG3YJ6W5he0\nA11ohV/2OO9TqMfNWoP0vIrZlFcf9aflEDk+oX0bZaLLxlVP45whHCM64rNy\ndazZtXa0M2T4Nqx78I3wLJIWfPi/XIrwWXRCStodZ+iwIDzTtqx8M8Zws8nj\npRMpNkAU8DfV6AXWUdkp3Gpu/5KRsX8aU8Lg4m5kJhoRClJfpeCZFLrq8FaK\n7afX8PNWrTC7BumguXK8vUxQsO1y84eW9e5IksWneRu2Z1wca/pYXP6OzjJg\nl5C8gixXQNVuXc2NLvR0A/gGpkUEXVXfSMtVvdOrGWn+qP3wU1OuCen8FlqA\nFrpT/9H7KLPZczctB99L5KlIXdWPgqySzIXL9MoC2EbD0UBPTsN40sgOxDOp\nMAzWBY5J/W0lI+PfWmkw2Y2twRSZKmYM3k1KU9KehcDgYBp4ZSPztNylHl9p\n+2Hz\r\n=/Uwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC//UtOvVu91hwHxaXtzolizCdaOKsIh+5UCW4HYvEAlQIgV8wn8lwOEdOBlYXHdM1dAsH+MSq20vZksjtgiIAr37w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.7_1572586144019_0.8343687137573756"},"_hasShrinkwrap":false},"0.9.15-alpha.8":{"name":"@react-ssr/core","version":"0.9.15-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c52474e5917dba41ddb0d7cc0489ed275ee38633","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YvGqipYEHBjQu01bxXZ5qa2oGJ0EXBjH9DO8WEyTHchDINFmiR0GoC2JXg6O6id37qW8XUUK3DwIm0G3YlbwJg==","shasum":"06b0d42c7f619bdbc7417e3046d0d8346e0f02ee","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.8.tgz","fileCount":25,"unpackedSize":33039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8NJCRA9TVsSAnZWagAAQSUP/i/QfWbfin3oK6q1y93I\ng4gVuo1BVu3kjtZ0++MT4bE4QX2lhOySnGIR1MU3zQghnt84U6MLhZp5k+gl\nRJa4ZQng3ZxyqNxTAdDrglooh9z9nYNPSSP/+Vak4T4N9Hl6xXyyEoHI0dFn\nTt2ZLV3IftgLq/q2Np2DR/VKEzUVaYysu0Cr0gGJC9v/7SwelxeUsXq4Txl7\nEjwU1y2Lk3gMaJHs7z4tCMkCof7HH/bASg8+WnMbt88SAqc8Yy6Fhgi4ovTG\nRjoanJx0l7DQS2xZTfZ+Gybljr8VCW9DahDscMgZtpYCiq9BL6JtX8L8G1Pa\nrtGsNQwhKUAOa4af6QrznLfO+QgfBmnfjRFNQr8gYFm7FYix4FpLyeh8irY4\nTxgCz5wI88KX6xHy8XIbbP+DWCiClzdEndv3DGfCm2RCp5E7PIVwgtxK0aDC\ntDfrXah4C8JlCZaheSbHqFMdbs3yPl2u5Fzx8TWY6hwzGq5Mae11ZRvn1JCH\npfIVzjqi5fSMTJVvQJ+9oBCYr3NTQOEtuPbeztZ46/ipqA9+lIwtKpTcWc1N\nSKvdvbSY7ieDhKXWBBTLPr9pfW4ik3NLYdMTYBr5RZ4C4bbKrHzclC2b7FvQ\n1W7vOvu5Z+QfxxvH5YPyR772FLlWN+CJUkRMuEoVpkR5qpdMCJ+kpT5QhHKU\nNMc1\r\n=oX9C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHA8JyTUUbKZ6wN44fKsnuZ6FnbFMEhblmJyCTSkTNCTAiBFrWtTH9+qOBq/khd4ExebMxQyccTjBCI/p3RbvUScUQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.8_1572586313505_0.3001562927248107"},"_hasShrinkwrap":false},"0.9.15-alpha.10":{"name":"@react-ssr/core","version":"0.9.15-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f5ebc9ab35da44702898fd0535eb8ac3d08d7904","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jEwOSfT5OdBbgsZHndQDdkpPht4v6AB65qnAjU+qDB5k3fd+R6ixtupGyCc0iUxcEj3RJVUC7v//A1F8ssev6A==","shasum":"c85c487c20bc4d87bfaf153ac8ebeffbf7e7a32f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.10.tgz","fileCount":25,"unpackedSize":33177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8THCRA9TVsSAnZWagAAe8YQAIrxMec7frqQPzABaXjI\niqbFopHCLGUIuQMLNx9XrZCcqOud6n9UTk3fwPUETFTF5rbWV3/sHAKEcwJb\nk4MSY/XKNVxSOCDdO/Kx0ROqx4DHc54lHHEm+XHtKwkPYxwkNka0ag5okxg8\nj0HdzItMKMuePspRNgQ7YYhLGpPlASpcAJtr81Af13l9lDK2Jc6mANaYjx9Z\nyZ3ffoo1ZUkhnz+XL0G7qGZNcoO4DmwfFow9Gloi/4CAcjdKKnGxlbxapaps\ndBfd3WEVlO/QIgm6CAYhzKCbHqRJiePfpbMcIHy6R4sbmkG9dTKqcIT1fCw6\neb0M/oVEZbRUaEm8Kd4Cxv6beZ6vDdnw3mFqV3iMMMgoubOVsZEAj6Z6EmNM\nd1gZWlZAE7XkenweWOQlPtQfzewi/DTLAMSO4HdqYaoyRofc63RBHJagYIFu\ny5AifzAwUkneBJHxNncVMlhQ0FHF+ZrgoPi0olUQCj1s5fBe83lME9QN8sVh\nyTkmwFWZknSZEwn1n0CZnHdgr/9bVJGHbNCSOtKl+FvoE+cpHmYl4w4MFtrg\nmupaMEJP6Xtvkoixg6x5UO05DenPz02rs0ylKyMInn/l82HejTSSn0k2oC9j\n7StMjpTsGBN5igYRKKahGADmA6PrdFdu1dDppnG2kZCaenybyE9u2Dv8606J\nZ89O\r\n=PD89\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4LjQUw81F3cqJUj9iTkIj3dVbOJcBgnVdwiB8pR7uOAIhAJB9jDDD54lwk8AxXEPerE7PETC6nY6xANcswMZIFMwV"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.10_1572586694530_0.9258213789199117"},"_hasShrinkwrap":false},"0.9.15-alpha.11":{"name":"@react-ssr/core","version":"0.9.15-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c33f825115eb783d20e5bf1b6a107422ff699690","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-r1E47Qq7Yp78p/0cLi2/vr1frUXqudSz4dXl9Pz67f3BcSJsTdJqPpBQWcXMDjpPnXAO6uai1EPvT5ns9PpnEg==","shasum":"cab9cac36fbc4ff40d431e92aa567fd9b73b875c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.11.tgz","fileCount":25,"unpackedSize":33405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8U/CRA9TVsSAnZWagAAW4cP/3AFDDwG/89ZOR75iTpl\noRppX7gx52hA/aOsPsuwobkgGld3C2yYt5MlytxW1hvCNF3wLJrvMrvqtH46\nq7PGe2qQwvJ+209Ud7kwFC/I+SssGsEHUzxe3bx4ZWmEbRrp0TiY9uxOdxbw\nf8wF3gKECWqVN930ZqCd3TN3A5q58AxkOGKe3tcGDXDednuGD/grg0gUHdrj\nVgacvxa50e/+Q3CViqxEXI+TyB0EZWm7uauzJnmmVTupucibIL8z2f1yowOQ\nedWLlCbH1XGQD3BwEJ0xdIzwhDXu/RZ+Ga5IOpimdweQxZ/l0USPQRT+csxV\nTlTu9vxPIesK5/nYIjukCxuLzLNeECQUmK8vw7Ge2DghLRVhSBTzazax4QHn\nrUPOXq89aGfW4vTLt+qmbmCG+3iMhqBK/+53yt2DJcelO077lKbi9PQyiHaY\nnP/NHviuS2PE2aaFO0a4ramUvrwi58EBA1Az/7Cj0vLUnVMFS7HBjx10EfZt\nQXOJgrkJq39vyL3ZoG6tGuPRzLIgYc8/Lz0v1RNjI7E7bDm1qTlpm80eLyxp\nakis05sajbEit4Be0fcEFwyJlVxxoavR9ORNtR12nLJZ31/fx5ZIFnk0qDU/\n1u5nENU4uEK1tSsHX/tUgfQQThjxIUvK7CmrUB05D5MHChuceCosSgXO7wGZ\nTpvO\r\n=UvjI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtHcz3v5m+zmZRAwIWzCDckw2gRxGN2dIAwk2OUTx3kAIhAK/0C3/cv8G2RwOeslHr/fxf9xvZDhop2mpLH73BI1kH"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.11_1572586814783_0.8624455831973052"},"_hasShrinkwrap":false},"0.9.15-alpha.13":{"name":"@react-ssr/core","version":"0.9.15-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9ed6b6f3075af7daa91eeee177dd00273971ad90","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jY83shMGfl7MSus1SWWBqAG0CpNVy2UT6e3vXuC56zx5JuYO+0z+0ebAO4uZDYGph3kXh5fzYfcNXmwn4VdFfA==","shasum":"0ab080fa13119ba41f98a6c9168eacd19270cd33","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.13.tgz","fileCount":25,"unpackedSize":33325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8gWCRA9TVsSAnZWagAAkfsP/0nOpnxwnHUpQ3HTQve1\nomA42r8CZuk7lC7jRm+TwizlspzHUzyHOiJwqJKLfp1mGKh9fhAyH6k9nEFN\nHSrnTDaZ0ONqV6cYXBkaCnB0zqTWJbz3Bs87SSGO5yHD5aSY77IMgLTvif30\nh6PaTqBxvY4nO9VYCmpej6p9EWXI46XY13/ghdUCJ/cUWhJhC6n8CTFFSNLw\nrcrusQdSxLStsj0gxaj4ytxoj141en74CJm0FyK+sK74uWpT09I/qavgDcHQ\n63NnHOMKuL9tOUyRjnjgSiU+gOQWwoZJENK2LUilCAobU41oDhpPqOIVDmBe\nk74BYo/MHKoE1wnKp4FNFoYK8cUY8arDbXxlWuIA3ciKQxwXAVwowya6SqYL\nMHqZli9Z1p0f+RsqkUuuYQ2o4feR/boHuQK9m1amBNc7fZ87baGeY2tQecxY\nvkwQyG93J+kcXzMPYXJ7L9HxoDi0jl0oFvIxZNSQj/vqumWJM7PaB1ceHrKH\nQURfsrRJXRwuG/3iekHvx4w+AGH7M3Kw3kWP7xS3HNqQGqM6oxqdNbJ5Hf1V\nmcxbuaW1YwhzRtzFOxv6eiRVjMe//9PNdogMyoLH5PZ0OWf06LR5HevShg0k\nuDQfGg58I7aa8aFoAbu1o1xFFN66PUvtkgqCRnfI0VxqVF1Ui5njqcQgXUXX\ncI9K\r\n=4oW0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrjr5Ipka2olhW3iKSmb9K1f8oF0y4eLrAwt3wsuWpYAIgPiofx2o+Ck4rO6oL5fItLrGXJ2ZLmVjvT+NBvWsVppw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.13_1572587542332_0.24268699579058772"},"_hasShrinkwrap":false},"0.9.15-alpha.15":{"name":"@react-ssr/core","version":"0.9.15-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e67c6e1ebd90820380504a2a4012e672caac3e71","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RktiZQuZXrjdeqJTbRxPK+lhMK8tLTP0U2bqPnXLWp70N7reHwPTPFbGzOkM0zwaEcC28aK8frfPkneawx752Q==","shasum":"57d8863c7268b85e1a9d4c4446d5f385f4d7b401","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.15.tgz","fileCount":25,"unpackedSize":33312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8itCRA9TVsSAnZWagAAsFkP/iPaaTqXp4QR9I7vh/Fz\nSeXcDR8GnwovWWqXDEuF/K/WHbTJ/IutccJFFHVdpQDshHKGDTL1S5X6ige9\nAbyZDgq+rXhYxQUMYGv4bfPcN0BbHbhEczfeSW6r+uLwqvHADeE+Z90mMf/F\nLEn9jq0ym5YDfW3VnXlBQkmFhSxp6J4hEOuTnxDgpVKZj2eKIf/IRNd7gaCL\njLmMcUXEv5JVp1BTsTLyhEqqRk1pFbCj3bAjYEPmJMcCGM5xBId62FP3XLNx\nLtUbdFbUj0+1e1VPt2y+whGPpzZzoKtgtXzKn9Dx/3jzvFkphgKyTK3pRe2x\ncZcKmtI2JscARvh/JwVc+DEPxyZfwarwbNYTrS1AXk5dfm2Zs43/iE4Esv+o\nk1gZZdVYiMSN/tIdtzFspjRM+/OSx3uyrt9N0hdu8+TIovt/ih6pGH0Qr8GU\n2JeWdhyQs0c5P1e0vBSe3LXha/Im658A6isN/1g1/0c2E5IG+ArMN9Dfc3G/\nyEQRC4j068FZ/MMO48I4XDft5luAVwI7K9y6Vfe/l29Xk14xCrdpwkkt0Uap\nisWVxzbUNE+RWR4yKLIhaBood6H42Jtu9pMYKzVl24cNtKee40e58yOrVUm6\nQvJvAdf+52dp42kaRFZQwgN8ZXjufOOW7QnHQpUWG3q7it7TpRfOD5hyfHa0\nLe85\r\n=55dO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEX6SqjM9K0gw8boxKcHcUaJHp4J/Qf0pYuB6k/JQVq0AiB6UrRikxJRhDB4+bawEsmSm7OXaBJJNZx+2vZLV79j6A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.15_1572587692666_0.9585023923672562"},"_hasShrinkwrap":false},"0.9.15-alpha.16":{"name":"@react-ssr/core","version":"0.9.15-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dc9b11413ef423fa70e03e4e2be2ac9ce6138833","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bGd/5xZ9GP8gKsRpm34h0h3fuG3mN8SuIOwfTe12nZalzMpETpQSTgTqs9gn0yaeVVzSTNgNVRrcOR7ifOji9Q==","shasum":"07792545ba269c1a72673e0c87ab654e4d8e5c51","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.16.tgz","fileCount":25,"unpackedSize":33315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8nzCRA9TVsSAnZWagAAvdoP/1r4p5FR7TBeE1zkR3Kc\npEnw9/Hz8VuGOkRpI20+nA/ExO0uGjyuS8vGxK5TPf1gmL362bKBAKvOUWgm\nHFRre8MPW2Os8lsRoe9tbKnhNm4lrgEfEarzaw97QCFj8yc60c2fXNI/VkdG\ngQ1boSujmsFEZZ9+oiK5WAIlPzPEEt4ODbqfRPsDOTzGgf9xw+HQFFISr3a+\npGLln5NfO7tAa43OUyw9/UJlERQwXVypWQwPD2NhsXYgeXLGfqvTxYghTTbz\nE4w7nz7Qa/Xzykj1iJgfa4U2qcrI5PLWOtBWCL5lqPc34jNRIguN7oO5FD1t\nmgNRsEyAiHpHa0rFbaXQ9LqaGam2IeFziUGuheoJXK/wU6VRB5Po2G4yUSrP\nIZfIdDcTcey6Q2f0VeL7S5FXkj263V9qTS8ve174KJTCjtteHXr/qSVyD/wQ\nXT6HI9/EhfSl8p1VnDM2i6PbiRvMW9ywO46Sg0/X3DSg6vnVuWY855cIDIaB\nnRFloM/8OVvJrJY9razYJBPXSRzfkPxNLAyhPKZyZzoisQN6I8UCInB8NUnT\ngKglLiajg2TAZgqdYbE+DrRxpsidpPvN9von6YQSAxmSYZhpBNZYJ7KvixR3\nuZQTj9ceXUcVUr+wY1Tv04qrhO/wTZyQdth2b1yEYXPH9SoXGSxaj3V3Ocne\nFD3g\r\n=JsP8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDla2TwCLOMLY97ZJ4Ztbioh3Ov8LMjcM5J9DYAuFQ37AiEA+IrFyCpTtcSaEy8han2lz8jKe+nGzIvyRzP8XtyL2GE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.16_1572588019239_0.12310120642940969"},"_hasShrinkwrap":false},"0.9.15-alpha.17":{"name":"@react-ssr/core","version":"0.9.15-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c3bea5066e2d10001011f53e6effe927dcb195fa","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bJlJKMT4MfKoa6CszOODt9eJUCh8ZlRAyYucnygmeFbDJdE8TCIJDyTHq16+80lblZywpwjsO5H0CG4IfcOSxg==","shasum":"349e3903615ea538dd700f2f0a1eef9b40b863e5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.17.tgz","fileCount":25,"unpackedSize":33330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8qCCRA9TVsSAnZWagAA7VwP/juu8j361QUR0kxJ8t6P\nwWjECC3aauQmMBtJ65l9qInshv+ZJKj2Cd9AwXBH+jG7O8ZX4DfnRESnXZVS\nMUCrCRCqK3udfXuqZcaOj6TKAJWbELc9uuOADmn2jHLmKc8pJIGby6ZQ5KsX\nVnvBNpEYBxrpC2mnQ0iSqBwMktbkq8/B9Mg8+8ZgRLFF9FrJfZcHyriOgLwP\nTN5eXl9I91Kqy9aP+KxqizZx9z9Nn0zHIvGjZLsR7vCDo7vP+uk+fKh5yERW\nxRxhfFXbsFbKNA10SHqE9/nnpkcl5Nz0sUpsFMbETF2YPVB2Kjt86VZR8xq4\nA3bIkGRYCRdalOMFvXctwJRnYcOe6VwjfNGSPXmWMCNAd2qDd54EozCDTMXZ\nfQhdoY+/4vBZL2gR3sjTYSYEpb+21uQ5mguDiIm9N7SbaYzJzvx4uws68Gvu\n0hz5HYi58soB2L20PXwUH60LkfybmuQ9562IP9ecPPU7tdQ+YipYeoWa4FKW\njYy9jYXYT1ol8LlN/dNINyiA+34QLICnfzfpNuFhw/TY4Fl7fGE9DhYKHn+q\nF2FL6Cau4HPCH3IjelJLzxh+AX45yOgXVUkXXmIn9fdZD2VuTl/e2rENTGD1\n7PHOWyTXSd2FMlzOnyjW+abrBOf3n47QJtvnabovi39qamCRR7fFMVZR1zza\nnL1H\r\n=R+qB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCKBDA+puHRqEWNOoZERftD45r5c04G4xIsHYJni8UIAIgCbRTTZ1Nmd6OANv2bE6PZMphucYkQdFAAFcRJwvqrHs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.17_1572588162458_0.5876072279168159"},"_hasShrinkwrap":false},"0.9.15-alpha.18":{"name":"@react-ssr/core","version":"0.9.15-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cea96043a157e14c088baa1a778815f8b88b67a4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-KfFeVy8pkRTlz9r9tl1Qn8tjX+3M85By1NcfG6yTfeuwALY5veLcRoILvKaEz1e4FikHLgeVlCR5CSWPHDEnEA==","shasum":"edf52ab860413ff55e3812caf45e669d40b88ac3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.18.tgz","fileCount":25,"unpackedSize":33313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8rpCRA9TVsSAnZWagAAAf0P/3ZcXIN1MBcJhOQJSPB5\n8xujYjwR8sxvlwmVTAdntohvLS4LDGt740Fd1ywqQv21NrLF59mn0Ja73NsE\nE6aloQKmA+9rW+PAa56tfd5OxJB8mpXTwssW1+xm++xpf9E4MqOkL5QC5YI+\nkHRQcI2v10CJUdOV+PKRKKxyZfY2sDC8Iysk9RgM94ZPq7cMiQl30PlUuwbh\nMvdFC5M9ex1VZb9+LBW+fC3Z3LfLg963+heRb0Epo4ZjB/ws4EOL/Hx0VDEP\nlgNRMntnv+0ISKs83PPj3KEiCKQxoxKZBwa6WS2YoqYLlWQeQEwlOVIjYUx8\nmy59flVGQl/I6Q2qMikSrbrVxW552HVUyyiwLBXCwA5rTDQBJ7LVTaSiMPtp\nPoDewT9fjk5G2pwA+2uaVQIsIGnPVrak07hw07y+LBM0JYxQ8Uk+1YvoDBnD\nPA/QkuMMGrpiMOAvaDn1DwqLmQVMjxBcMX0xDuvDpRE2tcvAtr9wG2jxmw6d\nnoechPIBv47KpgjrxLGEFEM2WHjqL+9zsuoGQY/ofOmd1drlEsO5aWMAu1x0\nynysuzzqe6deV/qIjbLz5BWZvKCXofWR8wLjN1qLfF2RvVnbl4AM4i453Oep\nXcEtzgS7nYuc87uKMbIS4Te1d0u2HWnQCFX8aghGZwAN2FQIYsHAfYjuIQ/1\nkBP4\r\n=3X1N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpiHOycu3kL3gYgDR3Arws6+lPZ9MiuzfCKSimkx6ZGAiEA0/2Sj2QbyyCR1GnjTdP4Kx/vMt1Esbde6YwSCiNcz3g="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.18_1572588265117_0.29274629763936044"},"_hasShrinkwrap":false},"0.9.15-alpha.19":{"name":"@react-ssr/core","version":"0.9.15-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b0a3f6e6d0823e20e4551343edb9ce22f45912b3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-I8wiOAjdPSS9xM0XlvtfHCiWS+wEH1Hhx4YThKx7BTCqbnybH2MDAS/Cl8IgpMxNsHMgPmijtAdGpFpGMwq+Ig==","shasum":"fdb3c715ae93c19f971dff4a498382567ad0517c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.19.tgz","fileCount":25,"unpackedSize":33334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu8tDCRA9TVsSAnZWagAA3N4P/A0ZGBfkkKH3r39pSsfR\nWUTym0Zqw2nrVerjv01+804YfygTvBjCygnMtHBRzJO09UEPdlm+37LFYtXj\nF2GogAgZdBC243ZBHkGCjtG2C7rMIxvtBidr8YaNJYFZPXKGMW+Eocgc3k8I\nb6sOhODNoBUkGcpjyp67zYnfpDTxKSklStBkH6nExHE8j/140hZxzeclGvHu\n0hkY47FMCLJ5Mg6MAOQJPJnUKV4ak+ctg+ndvdbwclLxa1as0BorTksQnxjI\nRcSF96aoXPU0THSlGRJCMLdVt/tjbd6OjqFmUZAOE7g7UFQHQHTkeKkL/iOT\nME7+B8y1gR/prW2UfMhiZtQIwX6Vw7YFSs4gLW0CdNlszhwNjoOLYZsxhf/n\nSiye7kHRQmr5zhPiXaahqQTF7gYvp+qpgGzdWLuoAwyEauFiPEQv1k+0rckQ\nnz4W8Bq6bdKsRvEAv90SlPOlDXWP9yuO8RQfjFFDAYLz7KZGhEXY63ke6uKf\nQ4CZSSThLVimjtUKt5y0t6paWq3uXeEjP51tRHncIFdJvKUDCNqka48Ijfrl\nO96s7gwu7QJP1XevVE1R3BgtxViUDdez8wxCziPP/2E1EraxKECDo4F4DGw2\nwjqklW1OGzEH1jlg0GuoqDx7upXu96tvfRUqu6z5ITUdBzMlbbMm1J+6MQ1R\nwqxd\r\n=JQj+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ0xoRI7ksyURiaPiER+wWos2L99YkEIltvro22m7MewIhAKzUR4Iqw6G/2/J9gtLlx3DGHpQMhZRjrGIbYRt0xyEn"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.19_1572588355180_0.7989533027157183"},"_hasShrinkwrap":false},"0.9.15-alpha.20":{"name":"@react-ssr/core","version":"0.9.15-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1c474321d98836ca80033dfe0208d59e6705f43b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Fpc6QZqCHtS2FmIq0ZbhlQnPtdNKbL2dQiduu32IrXdsUlmTDuvEXL1Yg+SiJN1O9SssnRlfokYSo4+RK4LNFQ==","shasum":"ba58423b394686fa75b6ff7ac349cab8d863a020","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.20.tgz","fileCount":25,"unpackedSize":32841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9CICRA9TVsSAnZWagAAjyEQAIKCxR47U7brcvu3eKpE\nGzn+dsdipkNHpj595sXk93SOFD56tdz5LZqldgxlOuIYQcR5A8nJIFbLRoy3\nIBKHkuTSPsL/+TYY+cylhIuAu2VZ5OFk8OLw9NCco0vhRAQHTxfRLNxJKdTu\nraZAHTBzXQcJiWO21v0v2dcUEOQ8FybjdcyEdXjyMdBa/7uwKj1EDziMAcnA\nHC2sMTB37agUCpkhx95WILClJ/z0pwuASUZAO28n9BSnXtkMipavogULcOTI\n4Ff3mOMvFPkrlgm768HPHyi4SqrVMEmnOELOtj6dCeo5wM/AaXLCj06CUHd1\nBf5EtnmXE6vu8q/4D0+w4WfYMQQOH2tczo7e2g1yz4DRGIQk8UTs8Tj6LuuU\nYf5wdtxIR3ydBK0wbq6DUiyDDpbSJfZu+OZBjkzTRI1V4srjr2Vhi6k+ffWc\nnVkIGhYkJF5/6x5Oe3qryJbMJrYBPJmxcGtWKr1tn9L77oggG7sL02k3i3gA\ncsBEasQ2REHiHXXDHwNq7i2cdi9P8pHWEMYqH9u4BvCsrqZf/IyU99YREG0l\nWVBn5jnrNPKb+dMxsNTnadbkiaIS1orLQ+y760WyRwiXM5YnNs97XnTCmpcQ\nqvC1+94O3uPCtpsLHVlPnOBLPvAIJf/0v2p3Uv8SoZATfrywI9C6FmoHdoxe\nBPgV\r\n=CBP2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBrZv1LPIMIqfGHNBkg5dP/S9NzAoancLeTv1lJwVtgxAiAuoViQRf9+5TMfZJ5IK9i0O0ayqLq4MUdtMgWtqAHn6g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.20_1572589703641_0.7530267342666914"},"_hasShrinkwrap":false},"0.9.15-alpha.21":{"name":"@react-ssr/core","version":"0.9.15-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ba77cfe222da96610729a6a3cf440143db2392b5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-D9lDiSvCZNFwy+O6c4OyEFgZx9sToawWvwY01YUyoZ7Cf4stoEFG6XCQqFrxmwUWW+2myAUnjAe48oYdNlHq3Q==","shasum":"7d9acbe3158b2d7cd6bff705abf3fc865cd917a0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.21.tgz","fileCount":25,"unpackedSize":32838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9EICRA9TVsSAnZWagAAnxAQAJjtalO5m0a3VfWi35Og\nF1VGdOkkVC/YTsqU/Xvzq8Bu7L6+CTZ0kOrowfS+Z6c05zeF+AU7/FqoHO1S\ngWqJNhbB7tsf5j+71CkI0vo1fxXb19UG4UzUMY7ezOY13QAjtId/U6DGdhyK\nebSgr98Y5u34NrdTUcUkDegeVR/09KIWX5P4McngDDoZBpzMucM5WXJdVo6f\n7aVQtP2naWyraKxGFc2tULNHdcd8bPfbJ44S5Ef9X7qp1Q0nURHA8Xuh/Rs3\n5GdVMzRMYkmZZyduQ7p8kWhhrjwsk4t2W6BZv4sSv3SQjSrB089s+FzMzfzH\nceCWJcWd9O7Kln6k7qdQ+1utgQhlH7Wnqs/bgrKeD1YkAp4TWWxA8BbH0AIj\nS97ek99+PE1t2MnmnwZXLqs7Fgu/5N4I0LFQrzYb9+sV1jMphAVXY2fSy2b6\nOI41IHC5qGV6/MpiD7P9EPDIVQLNQmeF/HYiUMQQkktki2hK6QZPbFHRiCzR\n3ifPZqjjIzsiiPvLOE8xOWJ2VPbsOg88tVbk7cG5tp9DSAHfoa/H6941P72c\neDoXr6NZVFRqzSgrgf0bWT7fq5WaQ6cgUrMI3Fc7XzuZMVgVKJ3NwiNNB7OI\n7EDuOao0gHXzVvXkagqU9zyTJ+tUvZ3nD7WC9c6i4fid0dnnzJvmBSb2nH1M\nN+oi\r\n=RGhf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCP/pG5Ho61YKpVEt8J9pnNvW52WCkJfB/AWvrScZsrBgIhAImzMdrVZNzGzuLi1Hr2eBxq94mgUy3SxH+MnZzE1tam"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.21_1572589832140_0.0722438793612532"},"_hasShrinkwrap":false},"0.9.15-alpha.22":{"name":"@react-ssr/core","version":"0.9.15-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f2cce448cfc1722123697a0d666d2370e48af582","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-st2vG/P/jhbbV2qs1Lkys9jQ5KoUNWrhkdJixQNFiaamv3xLzocCRzAfFrpSMwrCUc/qFoqd0ogADOEsWEX9og==","shasum":"f10e99154c9a1a0ceafd83bdb4f112f3fbb0b06c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.22.tgz","fileCount":25,"unpackedSize":33515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9GXCRA9TVsSAnZWagAAjC0P/j1j4FHwiR00x8nXUVLS\ncP4tPgFXoM51HHy/w4eGpgc1sxB7yjoRq0bQ85yIo8fV17L70z2dJl20eB7a\nq9MibKshT484wRhxA3t0yRgnHatPrarQ4qwaU+N6p8fs3ASPqWqUQEJ5FhxY\nUxUAYwSQrI+DKlYFmjUV/xZQpfAGnQyrykWObAeSUYEu+7sCltYqfh0WWnv1\nBsVsQSiW53NxyZXfB2DwHdqCsNTwoIdLpv859jS/I8BuInnFvhAwIItJvRZV\nXXCNllxH3SMLgN2u/by/YRgWqeysQ6srcy4LRVw53r2ny1onJp+KWDWxCgZl\nE+bjwRdP/v19+XIFhrJP2CBZqoecy9OreeNncuQ+Ico/lOiF64OAwbi2Fgc1\nhxkRnvQ1akKdZyA3t7Jo212lLc9v04hc4vJSogMsfconQaH2J5FIAoCLm4Rg\nybQyosmNC8ALhd3Cs8SR+/FqkPH4JvR/fyJc/kTssJy6I7DVAZK9aqCwMrzG\nndXE9v4h5ZAI9q+bJT9/UFiGPUTqMpTAh1OKglXXX7M050qcskf9ydxuiCp0\nisNYTEBZIAC4rAEVAhhO0+SnEAhcoljY1rxSZ2Iy76kUhjaIt/ZWRb/+zH4M\ncMD0JdMJQX4oioGK6nchcRiuD5A5Ci/wFbtl0ZTDWThW9n+oyl6MhQ/GWwef\nMJGS\r\n=k0Zj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICDFvMjfKplX2/dQTpFh7aaj6q7EXsTth+C/qmh3tU+NAiEAr1L8fg21grU8eeGQo/SjBhuUzpYIOC8wPAxho8Xy8Vg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.22_1572589975177_0.7212606057802999"},"_hasShrinkwrap":false},"0.9.15-alpha.23":{"name":"@react-ssr/core","version":"0.9.15-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ac339ba1a734d7ad4920adee96aa00fea9a9ffd3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ntic6THMa43NcRp1DE6H6mX/ubNvSXhkkxflxXI5iVCRyLNiYELaoa5lFI/xRyt4dCjhzm85mlFKRcpx2uPn5Q==","shasum":"1acd60264472b3b59c52d46e0da3f1c3c5d1f3bd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.23.tgz","fileCount":25,"unpackedSize":33295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9TbCRA9TVsSAnZWagAAdjAP+gJqNn3glvoSln7od3Pt\nEBIn1x5TIKHpkTBYHyMtKwgB7wHJZAanw1P+VxOxEbJbnRFTKAApVh46/vt9\nVR+DZVld+ykS9itM8VsbLsVDwZy3V2GXI3t0EFqtDyxIyasAJpsvRcJeKmGL\n78IobuzAMaE5g5RpB4EBRxdf9vLL4snQuusrqCj0melMU9Gf9GoXvy+5LSUT\nZ+eeUafSGT3PUpY4uxkc/04jEjjOJvlYkvY+vAK2qGrxz1kCFQJCAWHz5zZs\nqwy4M6M5C/RzCVOgDb2yqJ7bvIDMYDdKoykHXTAufHbmPqBwAVSdk+CgC7Na\nJesn0i6CADRr1tp+z3qZJr4tTRJWSx6wtOj5/EdPablaD2iTIOWrQbiOLwaU\nZ3rWZijiEUZZ1WIu+/AZL9RxJ9XqKv+DugUS8V3/gQCwMH5PBYg4TfgJxNWm\n0JC8klGrDlPPc+Hh4HGulRiHe2pWYq2NWkGwqm6h3GEMW/U+sE+9zb6n/6Qf\n5scvLiDdUlrFd0o4S7OGtMDVRpk1UKBVUbbzp1nrPUKJ2PI91OiA87ai7Ebb\npfiLoSfOMUCWebzgz49UhuvH8kKwmdKqUq6JXyxPNJ/uBAgLOabZXwQxw7Fg\nY1Ob0QH0xdxsHhoevJ+R7lLVcwzkUMo6cspSjHtFKHAZE2X+Km5xP7TQy777\nJNmi\r\n=WIfU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAJD8hQAdIYIm5p7Ia2zuk4Py50jAN0ZGRi9NHfIbo/zAiATaHGAcY1Z4KoN//zDrRWAZ8hLy/uknOmqy6nc1wMKDA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.23_1572590810808_0.8277679218920073"},"_hasShrinkwrap":false},"0.9.15-alpha.24":{"name":"@react-ssr/core","version":"0.9.15-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ee27e57d1c91c59e363ec0ead3c25d0870313dde","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CMO3TFSWNeAqC/ECU6PQOSWmaV5g6KAijEl35IXmQ1Tgm+abTUToNlufhnCS6BsYtn8Nucq+IyOkhDTznCh/HA==","shasum":"c67b831cb1ec6ad2fd3dd37940f7db7110fc8805","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.24.tgz","fileCount":26,"unpackedSize":36566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9nJCRA9TVsSAnZWagAAcKMP/1ocCiyt9ASfruPKocq7\n6/2USyC/ALP+kgpqRSKxaAd0qQy3CvFs0VfgWFxPsy+EkJMDTiGddxvgjOEF\n/o7RmKxop9lLJePkDsBBefcGLqw3hhqyUzYPK0QTgy8yY8aNR3BamHETqY1+\nGI4b6iGmbhpqSrjk2RCJzOOIs6r7FJlUj2HIX+lK6cem4VeS20PGhu3Nnjh3\n95sJ64BQGsSUb1LHssJ1IxSclNbRFdT2SxpVeY6cNHoFnGwMJrZbjjUsZxkv\nkiLTFpln+nSW8gbS78PArjY8DNTR+vQ4B2rExHmJHmjDgrU7CPabACJJ56k8\nDa3lOLlWfu7A+X6H0kJVdDk2lLC4kXzZIZxTd/bwSkhvaeEfX1YfZoksi8zA\nYZvu1uzfFlGEBCWhCfR8bpKM+0X9PmFGDAH57azdlWTbzVU8P6HZvcWMMgU7\nCZB+Eoq4Fb+d+VMALrxgTgEKk06QmKH5UV/RLZgPTfd0PHYU6xujw0Ol+YnI\nKcH2Fvs+wNlZV/NzX8zycB7DhuHSQeyUMXiS/EE9NK8E+SHbimc0d5Uho5w8\n1J1i12jbraTvZ8L0n9CIZrxGq1hpKJ/pggFgEOxvw5txGs3fxJEiJcOk3ODh\nlm92pEJtFZLWcqCQ3wTkNo6YTMDk9H67WbG6yUvkowyIB1ROsJ+TQ08Q6zcw\nYDMx\r\n=6Cyu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2gAzlRAuHHg19b5c4Kk1yvIQNASpKgX1TNGnMVa34ygIhAKx1ygyufEQTUcETnCVd4pjh5/lwrEj1lcRxCjzaAJDL"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.24_1572592073249_0.597349119366337"},"_hasShrinkwrap":false},"0.9.15-alpha.26":{"name":"@react-ssr/core","version":"0.9.15-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4e9724dc791d1d9f15a1d0f3e65d070563bb948b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qda0gb6mf54Sk3DDXDBvKTSjwNXnaEZSyv+/VEO6Vk7m7qlTlxL24hjG+k0V/EsorVNfc0Lvvov3qM5H3cU/2Q==","shasum":"ddae69963a2f20975af0c0f80f252e1dbde9268b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.26.tgz","fileCount":26,"unpackedSize":40057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9rSCRA9TVsSAnZWagAAN40P/i4/84C/AeyPIonl/Wnx\nFGDOmKSXvJ0ROaI9TFqfPdBw6ckweGjZZ2L3yVYTwxANcOtQxNVB1ATb/GXQ\ngGLcj0MAq+D69/o9UA8cx0A1+DQjTdNw+qHTU9kOKsmUoNTF7I7cIwFUZpP4\nnPMdFHgeiPLQeXNnal6kXnoN+wkpAB0vpZyUYUtZDf43nAqdY144niNwEtAL\nN3iyh887GfRCXu8qNSjfi/mVyF8+upVimFtEz6rEYlW9qj86nhvyv6ZqKWLQ\ni5IkcTu1r5cKocX3ThpcVtiMiyC/H2oWlyYhbgFWbHmbO/ODy3K0C+ifeq7J\nY0mPN9fT9RtGwx3RrJs04cKuVxUXtGU1itBIOBRYQX4XsNnwZcJYoaiznpX/\nC0bu0j7J0zBV+JMQxLYw+pqQzx1C0Yz8W4po7ItyEjqb/1x366Z9ZjDnTwMj\neJQ+Mk1tFWfynd8YJ9XDMkC3A2Qf3NnU/E2zxI4V4tiDoIJsePF5/cI1qvY/\n8jtdCZt7JAydUio9aKFlouz7wF86rYK0H9AoypGwJFGDDCi1S7Vz5qZcqa+G\njrwPwBK1Xdx+Oe6vkWRDJXoOAFT5LGceFAjzbyjfTgsBgqhEjboO0r152ked\nwP2gNGKiJwhk4enNfWObkXbPjgwpcXCgZnROZ4yl+FM5y8yOg3ymJ+by04pj\n5Gqf\r\n=lQZi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGxfYb+31mR7tm7MPHP0hLy1fLoIZSTHOv4m2aqfKuZgIgW3hOcpCDP/0uwWD6e0by1upNAM3ZD4M/H8UZzeimmT8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.26_1572592337485_0.2934931596720658"},"_hasShrinkwrap":false},"0.9.15-alpha.27":{"name":"@react-ssr/core","version":"0.9.15-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"eb01852348d5611c40a92200e4674d1d4bdae426","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XOCIJYLsfcFZBw6upCDVlzbACbcIkqFckhzpGK3ErEGa21jv+rkaBvy7noivyIyERqwg4nYkYOzbri12YvY7OQ==","shasum":"61f8dd966dfa4501807307aa740732150d9200a3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.27.tgz","fileCount":26,"unpackedSize":40056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9sWCRA9TVsSAnZWagAAwzEQAJIXg5tc4vnwHM3KJ+CF\n8iO42s6EfT/hW/xTHkBGaPaAXosvOjILTdvv8Ualf3qO55JiAHdosn14hwIU\nK7UiDVL1VRN/qeoD69IWpo+9qtXCZGWFPc2disgAxnUO0mqgz3QMPhJxAZRm\nAibFkaAQiO8tZnqSZ8KooacdgBWDuE5odIXgmEHEEYad0zdBsIe7IlL/qGst\nr7N6rVtnPVzmyYSKC9M+Eoak7iZUFjXSBOqMMt0Q7w6fAD2uGRJjl0y3fBdk\nRtAkB7eHgH5rjRszzLz87TrviShHKktZc37wwa8bNjf8VaOMd3Qu+x0YzDr8\nC2vUYfV60LaYdIBVPJCgDM318JGKjBpGet/PErGNi7J6NzbYi9MG/zYFK3kG\n+o0DpdOJlLTkK7L5soEiiZU0R8unfNbFb/J9yDcxQD1XWUH6JP9Ly40zTCq6\n970JuzxW/pRfJcDczgyx+9rXYwUvhGemCx1cIhSr2FzBlbiHf0rgWK2qOj48\nHybXvIZrhaWGlLreLNwfTDdJoHxWw1gRYcO/4D8+Nvuqt3sgk1aVTSwfbYtm\nV04ERAouKGcFt9Yu6WiQ7JNDinsSOu17mnfrgrM/Vn5e/SbuKB+SNbdYcEa/\nOb3b/pPUeRO2QXoJgVkoYkLwAvIwrtmeUr/vLBA1T9uv+MlygK0Jwp5DYB6+\nW7gE\r\n=NraN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBG6qxPKVEyMrIXDphqjxV8iZO8MTpExCOX1n51Ihs75AiBCRD+FLm8PZaHcmUr776B1J0/1airZfQBKzotbcjN8Tg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.27_1572592406335_0.8238070150430659"},"_hasShrinkwrap":false},"0.9.15-alpha.28":{"name":"@react-ssr/core","version":"0.9.15-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"281238e2630a408c6e2d6e5c5c3a157395e14630","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gN6eEwrj7XkMO0k7pek5Y4Asw5XJm1pWbDBsxT9wrQBNFkiaqNtzN99cVtDL0HVoBNZV87lWbavsIQ6hMUF1Yw==","shasum":"4829d62cdf1f24b4ee374209153b4bc301bc3a55","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.28.tgz","fileCount":25,"unpackedSize":37533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu9xYCRA9TVsSAnZWagAAAN0QAIrnvpCoPCIzka1uWkJ1\n9aZVHFlDIijdFPslHjqXsVFzJeZq4mmykSmmcKs8gfL/2WZEC6l3taz4JDRN\nP7rau/wXKllsYDtVYBS6Crf7S2sgc6+e6fQtVXEh0Xq8mNyqfM7GwrQFikY2\nqniCvZBto1vbt5nfvQ6HhDjJ0/bZZmRcFaVarhQjUzhvJELq+VTnkrouPgpq\novK9BYP4EcQvP0DAyBkpx+LOP4hN3jIa65R4rb+kqE6vlz7nDXrrLJdh3AG/\n9JllQkAJ62i5wuZGT+ROocXi1pFQE+6LI2DiuHgdMZXgc85ujsLDiwyJUy1p\ndVXnh22jqwkJTZLNDEtTokZU12h5dNtp669JzMwv/4f1B1vQC3WqzLtZwfAg\nVB+p+aiOLKfOL7ETV3aHW+QSa6nA/zA0GDP+/OYeeV+TD7tiYMMcfnNvaTMA\ndPbWCf8MSJUp7q/js1vTyQPyRL31TdAw0yUObn2T+FZfqcnw83bL5Kb/vuuQ\nJP6s+EaXmw/kjI14Wd1ZqyjTJjf6Cz/XjJ2DBlKHgX7U/0+3pVqXynXx2gIF\no0+ssaUALwRLF0kjONwWDp6T7M0dJCjjEyxiJHl5l3UfKCGthscy/pTuxdtJ\nKWujzFV98yIPa7IzXuCfvCkQi5AGgNh5rcys5cTBFi+LLDDBEKDsh4KXaPlj\n0Cif\r\n=e5NI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5pObyJxRkKiLd+81T2Oop9hq81lIP2ssPnH6JAMkTigIgALQcxi88poHrpRuv2l8VE7VShL+P7xsLomALJQCpXww="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.28_1572592727893_0.19175975567129977"},"_hasShrinkwrap":false},"0.9.15-alpha.29":{"name":"@react-ssr/core","version":"0.9.15-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f09d8e88a5947611b295d8ffa5ff12549ce0deae","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-JQNVNh+3yZVdx4Tde079+WODhBFUt/a/7bjSgsXTpxZjRCGcSB0xD/3LCAue4qIo7JYZ5pVnS7FbrE1XsnjNZg==","shasum":"eff6a168bc9db86782286f34942ee05f732e7f5a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.29.tgz","fileCount":25,"unpackedSize":37642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+ICCRA9TVsSAnZWagAAJqIP/Rc/Q4iTLsWkeot9CYMK\no0BwUYhWEXex1NNKhOW41vUIAPc79HhZce1J3jbaLLrPONyX7Rf2OMYkke3V\n3eMBa9rHu8m96KI37HYYImuQUVJS6FSqBmWi8aT5clQb71SfejYfSfZCxePL\n0P/QVKCHlu0T2QHzjafj66lrAAJ2QxJTOULRxDXSzlzs9VUDXrVPKUsmqHHV\n0YAvJG5IaPgueXhKcohakcwFlM7PiEygFIEj+DidPG9GtmN8qqQOSHEZs8X/\n21I2u9RBwwFOtGBuywvRjmJrqhVvHl75iYaK6TK2IGYui/dB60srE7eMTaCo\nbApsEG9G010dFxGhIRNRUKE+Oz5JT6SF/gQb2GcSCZvhFQ/8Fkrr12l0y/x5\nmAdQZXxn6W26F6j1kQ3QJsbTCBJJX6fsLT2XwP/z8T3vah/23RLEHrCgSRz2\nXpcIcsRVYep8JuEuNcKQrLxiX3/4oAfziUGTFsrGNJjV86HQUBbqfniI8OYN\nCAFx01fqQpPoMwxkzPF0Letyquqo4RroYg0EtJI6RUBdBsJssY2IGz25Zk9a\nZ64FzAkm3RPVRshHi4hRFNXo+zto7WVqTMQjrbx5fAjk0SjNrybNnbVqZyLB\nITwohRaz6eNg50OLYxS18m+LxuxAIzOoYOvL6JDExGlZFEYpFYUHbZEeD7Cv\nMBDW\r\n=DqoP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHdpUOMwEA246+F64rEfJs4kKokjtgPPKn+FhAwBIZ3gAiEAn6UbZ81jjGVk+MAoy4uzOgtf9EJPwz9oDVmi3T1/354="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.29_1572594178301_0.71309841943042"},"_hasShrinkwrap":false},"0.9.15-alpha.30":{"name":"@react-ssr/core","version":"0.9.15-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9e80aaa36c49113df31336fd1c7128bc7c4d5674","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-u3QLAmU3NBqegnffvj5g3M3VBQ9R/tFCLhYycTVgZUERrYnSo4pfEZsT49vSxveqdIhXSCKjhJmn5Kfw114X9Q==","shasum":"8e72f8139e9cd28415a7431ecbeae0c11647a6ec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.30.tgz","fileCount":25,"unpackedSize":37582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+LcCRA9TVsSAnZWagAAz3QP/2FmNsGOAtbZzZh1M9Qp\npge2JJam7ahr0quaZ2L/fm3P9iFzrIkpnlN5X+JkLTLiO7yaCPvJgDiZhIlS\nWynYAiIH1nDPBPcs2Ny/ETxaQXjHceqnm97HVoNrczDwCg+5+gnlxS7Q7pam\ns74CSaAne1wamifPjHYq35Bhf0BlFSjIL0qwncQtM8+2WEiPnJgwQX3y2nNU\nObFwPnT8rixTih6WUdXYQDekDbHphd6UARuzHjslNC1gXLycS3yxFZRksVUz\nDRKnRqOUy+7imT0f4nnOtMWh0Nr2kDPLqJ+vayS5sK6ZnyeqazzHsfs5VEcX\nBXfqqb2D/wtqds3V3raBXK4wf85DE4YM3WlbOHFNtQe84pCvXhu4/EQbceFz\nwiEwrdX+s8w4JrvD6/xjFlQwmu578OovxK3Az5poq9b/g0NV1lfMzOipHqtU\n7J2VkDDSQq38/WzN5U778PHW7/vV2lX0jh6j/o2zcbqUYG5HhCDQiLiNr6pl\nK7BH4heFRhc8rOLWuWiFnF6tkH7gnXwy9IipcHkgok4nR9XHQ3UVzcIFN/5A\n7a9SciWZNpCGw3IKobvgxnyxUezmUSe8S0LQuihaGL9MaTGU8DyZ5ilPXKCv\nCJ30p3L7xEhBIoSS7aT7Yd8rFOZCVJOYzn3YOGNm4rPx187PK61AY0Q2wc+u\nM6Og\r\n=1lwG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZXMi+PuSamoFdNhn+uWVtliD9I1QxJDmW4hLGs9Xj4AiEA7NQGBPco2AkPpbgMV9xSciGmSeD+t5ila28377qiulU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.30_1572594396485_0.06847579686668603"},"_hasShrinkwrap":false},"0.9.15-alpha.31":{"name":"@react-ssr/core","version":"0.9.15-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5c5d9e47d39ef0497bf51d6da5db3d2f745375cf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-p9i5+Gz7SXOv6gHfdjq/jgWNF+sAjSU7XeGIwC8gT2fSbCeUNuuP/3i0UKJKLwnn1hKLkd8Aw2TieCsvQWUlWw==","shasum":"db239fa7e9e09a5092fb45dbea223581d279f481","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.31.tgz","fileCount":25,"unpackedSize":37654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+PbCRA9TVsSAnZWagAAi0MP/0DsLnFYsF32aQH6jhZA\nYQF26HmrhW3uwsSHTWcE0WIE4Sg/X/MgUlwnfS+k/pAiTzB/KsbqR39GJspD\n5rzsCb7a/2sdBlxhTTdjbuSi5mkMKzAdqpHvPq6DeH9h6kqkuAE/RRo9H1ZY\nwNcqPkXeDcE/IR3JZUxBVItJG9uEM1L2Y1bdUjc2yVN4b3xQ8DQsfhvCt/z2\nFLZoIqwN4fvLPN6Twu2cqGhLzg6AwoGc+LwUDLUdw08UWUbsD/CD5bjJ7SfB\nXmh3jg6fYEYPJYdTCN7Ib+fybNPdi24RibHB2MyzhMEdKC6IV+R86iM5y+SR\nOk4b8ohggJTI4qWFJVGrg/FbppbVuTyS/60EVWrDwwVwzYtyS3hlop3KpsbQ\nuz4Dq++O0FTA0rMhlxwOJPqBNP/vuqH9dTDgRRmeDYOhZtt7dPXG3geKUNFr\nCFZ940N5y9GQgUVclwkLPYY6AhdlO9KwGQueFyn0/kRwN67qBy4i/REWw3ev\ncCJK7/oHz6fH2RSF0UIH7fSKy/sslm2SD+8xiTFABaw7CezF+TG2QFmqofLl\nCw0BrRui4t0doTM3ZdcEmO70LasgUUTmzJtv4ATXLDNHW0Gd34ZUBDaozz3v\nS9L+Jn69kBVGfg3/hjvFQF+EIKHqGEx9cx+Z9iruFHp7BA5c/NmauxDCNLNE\n547e\r\n=S1KQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE9SaGJlK6CNVpO+y5xGi3/naNQyC0vvpx9o+lKtlUU5AiAXYyiPC2FZUY2UXnM0FDSclkvcsX8azA7Qctc8iqUSXA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.31_1572594650788_0.6299231374910346"},"_hasShrinkwrap":false},"0.9.15-alpha.32":{"name":"@react-ssr/core","version":"0.9.15-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4f35758e4e2f6238d602f6fe9d8e531810767afd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-z0NimdGrMG8BdGSsgdVAOt3Wk1mjRCBGok6JsJJAnCbyEVOCNdKt7aLIKvf/B+WAoyq64XcQwwNMPCEF0mIMPw==","shasum":"686b1bda507572b9350f2d167b6410fef187da2c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.32.tgz","fileCount":25,"unpackedSize":37491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+ZfCRA9TVsSAnZWagAA7oYP/2rIb4OR/KlDJS4ig+zY\nOlWJDWqOnQqQG+r1YkbTwbG0uzIlJxM/IQl6FbJtQr3D2W2km/736bINxikH\nIDtDVcFLTu77iR6S06qqFOWmLh/FPYQFelw58ldSBE5UyH0zoIx1kb7vko/G\ncJu3trp7zDxs7X82Ez0GbU/SyNFMZRtAlClAm4ydDZd1NpkFA8dmHz3EeWAr\ngqw4xj/A83YTtrlp3Mbu9+UZOF6/bMMYzkYhIFYL4Mk4V3fRHCWJuOoB0DL2\nEUJd5tkhpkVZz/y6EJiZZJnTz0bG/7VH1V41Ip9kVL7eFGN4t8EbyKcF9SLh\n/zTtGlvV8oFA7rRvJZfA08ewE7d6VSr4whlw1reBONH8RrNAakmA4yF1QimG\n32JbvtGsxYZiOSY3enI8I4fFud0FPzt8ChiwtqGn5+CQ85RCEYHuvij3AWwn\nboncfulcl7EeUsFHCcG/WJuMtAwm+mxtyXHPyanNmktex9usR0MuinZGmYjo\nVspPcLSy3Lfn450YXECJdEK6Kir42vEajQxeYz+J3zk+odtx7eTvWFutFyIu\npKtpOTyjTWTufCGGlMEEuWXA9zIsF21caHZrPOLZnIywLluO2rcP7yHp+Ke5\nNQoHsMj49z8em39JftFDr3LsE5Zg3yrZ1US9meLjcm9WOJrgX6rcPlOW4ibD\nXL8X\r\n=+VWs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa/qvK8IQ84pOOwljPIW5RItmg/vwIFhLPwAnQpbD4jQIhAL7p7mbzmd53LH6oDJe0pcRgQvO1Sr3ZgPquiqiNXLmz"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.32_1572595294885_0.23667100594744506"},"_hasShrinkwrap":false},"0.9.15-alpha.33":{"name":"@react-ssr/core","version":"0.9.15-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"75d6567ac9840a103c945b332819c848106a895e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9r/M+tDaiadlGl38OKSAoGvsfoM8thgcMEzDlo07ct7kNWfxRvdHWPgtSpr/OwnyRygSUhvYbl4qyzcaVU/dNw==","shasum":"e0aa7742517f9f87a733221d1c31875f7912c637","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.33.tgz","fileCount":25,"unpackedSize":37516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+coCRA9TVsSAnZWagAA8HgP/AzANa6HhXV+CfsJZknB\nVFIcxgXJCbHEJl5f8dO6RBp2sDiyPWbILZdlXH7fX2PMRO/qxEJLSdxrp0mx\nrjiIZG8UJImGRCpFKKdJbbk6OTb08LTLB6/XibGJrru8RSfQ/6B1dHd9QrAv\n4CXULHfI8sVZKsNEkjv2Zg39KsEG96uhPj475Q1hdKK+L4DeYYqhRpVBiI7F\nMSqxnY7G0LXFke2RP2ChhcQtp34qUJGMt6v0ubmjGsROJYIe5tvkwdOfxB9B\nM9Q/gTg9CSpZdGu73TkjzwKl1uk9QQPKzLyXFQhFYIce7FCmrGrz2FHJgZY1\nZge+nK6IgFpuf8bURb7ERKXXzQ0nbdyOSxs84bSqzuitO1ItSIst1y5oGzQ5\ne3laSd4//Mu+pzF3eAC6hHr8zrpKhxeuPzTgXtcZLirZIlj1JfFavCXL9BJD\nx73JxJbsurXL40HvrKzX4mCXHcpDtffycOZPgLYN2sm9QLU7tq1qtLo/znec\nevZ8bi9LXdxn+NaGE6G2Nkmkuj+ri2bRQHLUOuXyx+Kq4skdopSN7GPjyWd3\nKCc2iBmsur2K6LBDjoqyrTEnjLC6dUqBJhlzFaU5xMpsL4xEOSDX0VPQDZZB\ncUhqp6iYi1kVkz7sC1DESNjheVvoEiIcDMC3TWry++/wkIaQG3nsPwHKu40z\n5aYj\r\n=7xUF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICbTUWOZuSEAm3lTkGQu2AkXZUFHC5BXLRqRARwETYmSAiBHFhcG5TxKHr+7ewF3K8t+SMEJzATyDoR/G5S+MiwL1A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.33_1572595496147_0.9452396849226059"},"_hasShrinkwrap":false},"0.9.15-alpha.34":{"name":"@react-ssr/core","version":"0.9.15-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f55793973699000555325208a755770050cae281","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pOydz8oxe25Y+fg6sqVRc04VSVnznnmp+Gm3BV7q0bI0P8hR51+8QOuICuecIl8/3EhdktUUDkATHewlxeogtQ==","shasum":"0f03178972b9e8eefc055906bf97695d314e0647","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.34.tgz","fileCount":25,"unpackedSize":37896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+sbCRA9TVsSAnZWagAAFU8P/25zQE48gL6Lvzq1xYkE\nzcui/b9Yslv7qt7jKybqO6aBA4wCJbkbv85NALqiejB4cKUlAlakDRYE42ek\nw48BcH7lO6J6EDSfw7hxVa6erPKaTQDrfPq9ldTxlnTvUhrgEPSZDL8/QAbI\nDYd2vqOmFQhUcLdS1S0XO0LRKQHAmsNn1iZ8OniKoNk7vDuScNfOfgrglLdx\nV/zSkktugG7nhJwgxe7c7EMGV41893XOqnKiR2v2CbTdqBqZgUTC81U9gE50\nnYY+uzsohzd4b7iJ3oCAM92UbZu54quKvr8qJ4dEpe9+x2RXWnjaP3p5TipP\nzDaAA7oHd90qhPeCSOE9VMjIwXhSE3yOrxhKhcNp306hlbutfQ+tl/Zv6qZ1\nLsQYX1TCa13B0fXpjKkiY2WvUliQLzWEh412og9SqiaGwkQCeO/S93WpRawm\nTtysaRTwbpsY2kovy6wVAY+Y5ePGUyAXg5npgPKjtXCwas0rQj87JXZWczWF\nq+OrbOCxo9SrI4TxI3I+jgja4gOTecK6Y3ypCsYSHiZ9gBEPQk/YYXaZn7Z0\n3wuBViii4haTArp15gKQKKEv959bcVGQtcvX7xbqhyITH8FRGk6BnHUCX8TR\n1Y4AC57v/oUmJ4rL17XJYCjJaEyOGChbDBIII5y3kSfx6qdiLIvkgv9aBpwx\nYjtw\r\n=hUOa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6amSnHm2zKMsCyvovjauAFvnTVoSUsqLe8hQm9XfB4AIhALdANdyri497zvfNx761u+VAVBUF0+7vFDfwC8N3VDeU"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.34_1572596506802_0.5589504966757632"},"_hasShrinkwrap":false},"0.9.15-alpha.35":{"name":"@react-ssr/core","version":"0.9.15-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"273ee8d883396e2d5bf19a515467a5293119d3fd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XgUNZsvhIUtkvQT44Cg39+rtsklwd4uq0t6iP05HKJxK44vu+NYMxg1q2MWr0kfqfWQ8XACFPFG3FpZ8kR2GuQ==","shasum":"3f4675705e4dbfd011d8236b006d15024579f58a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.35.tgz","fileCount":25,"unpackedSize":37541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+uGCRA9TVsSAnZWagAAJrgP/jqVkopueH8+Iy/GwhD0\n3HMvNf/HT8QeYsdfW+jYYyw01ch+qbOUjUw591ao5uNvLXfK+9SZeJmDB5Ew\nMuiKv5jhJ7HaYRr3sM17gSPGf8jNL4684aJeLC6msgrLH0+nokYsGC2xBUxo\n1HtkEsZKlYsx5b13z1gffiSCGI79UtEBV/lV406OoKWbl7H7rSsk8J77fPgI\nT0pqzUS/2bSPG07cNOPESJlQpGvR3yrs1awmp2fqc4lTPHB8NJi8AvxE3sji\nlrkcvPnlTExJWj50QL8Y9703EpnPkJyz5HQqjdALvmMsR4ogozHTbbmFGmeE\n7aNv4xrIcKUoXW9/rLskAhxLJ+uC/0OKxXToT7L35stGajsoJsTuyAo+dCGu\noW1xvAp/oyGX1U2RymI6msMktfckBFK1u/uwWZX12n/6dR+HcDUxmWxcM5Sm\nfclL8lXBWgCgT5j7FSVNsPj/+A8kExFL2pD64A/yyvgD6xsvPUNC7UljvcDW\nZEqT1Idx6ryu5stQBWFndfixkZzw10BuCd06tCQIAPkYEucHYOl9NsBLsgr2\nDr9Pzn9H9EVstiqF7QU/CxPFA46loWJHCWg7DN698SvrM0NgWP4N7YPW9M0d\nHeIDj1S4VNx9zRG/8aqNXGO3U8ehEZ+3ZA1n4VQ0f5UAoanYEkQbrL5vJMQl\nLacR\r\n=y3L4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGRu26Cs/7phq4b52Cye8WbQUxN5OF0DRhlb3AzKD3AKAiAMb0Tg2whLZlwOBdKKdpF7YtgQKDh6HYYr6FrX0i/9Lw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.35_1572596613763_0.7210104644477067"},"_hasShrinkwrap":false},"0.9.15-alpha.36":{"name":"@react-ssr/core","version":"0.9.15-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b9eb26eb8c25423ea84ca85e4621ee85355a0870","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PVa6s8YKXB638GULrHV34/gsL1NNm+mRyQpb1vFJFzyCW00BQ6B+k+WdcMDGq7hajthf7E+ZIc+nDkPPUYM99g==","shasum":"9b2d89e6b251e7220fdec8673ecd168c2da9bbe6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.36.tgz","fileCount":25,"unpackedSize":37581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu+05CRA9TVsSAnZWagAARVoP/2JGY1VcEoRxsPIV7Jhe\nzybACfBGqBUkzaRdynVxAW8NacFdmfn+HI+sGpkMWpadCtM03bZBwsFRQ8U+\nM8iKYSH/qWnE9xZpDi7N3GxY7aMk5Eu6yhWHuFRiNIg8rNfHLIfBJExjsL0p\n0VJLdzY4oSlmsVWR0uUmuf1Tff54KkUSNU+b9Veu1g1qCGDcBOy+nHQN2O9M\nD9IIk1QPFaZugjo3MtVILsFueTSMbIunzKlH3PCabb/hF5RvkFX3YVmcautV\ngag/TAZSBcSXtoGiC8w6rT5Z4xaZLF9oBczGqR0U/2KUC8YUVwLawuPKgSiE\nkD2MRNM3Je1cxy90vbjo/0Sz6Mtr0wKhRswK8wkFUTB/PxhJsUIJk1C+kQck\nBTsiDM+7PACi7n67B/okojY/5TlaueOxPRQw3hu/cRVw9ra5ORm5yJZreq0K\nVfuUGSuTmvyH2tQjV1KAntlEMsgWU+49yQGyrjLUSXcHcCVD9ygDHuX6rkHK\nGKtpQe3FAZv364lNADbrn3yGoQejHU+3yGZgurCdVsJ+A+oqgHWiNHYo3YZr\nTZlRTGX31Ngf+FTT7SgGETLsJ1apV6o2vwqAp41fsNwxYGzEitkOR7ddGa/Y\nMZNQjft6mnDv7QMO8gSK9fawHMs02mzSR75h7M262c5O0Oua88Hvhm2Wn8JL\nwTjp\r\n=dxFd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwMZI2xn+DopbfkDmbNR+nkij0ilXGJPfw9JXoVEiXOAIhAJPbU7VlkEBsvl1rAXlQFIz9n3o7nxsngQPb5XMCZfcx"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.36_1572597048917_0.2701919830871342"},"_hasShrinkwrap":false},"0.9.15-alpha.37":{"name":"@react-ssr/core","version":"0.9.15-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8a9d24fa74a970dd252f1f7eab7bb2701c8b5a4e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Z/juct/cr6cXz6sHsI+Hlbo3AmtZdUFJOJeM46pqiKcvxa/imHDfgZULfQ7w1bdIZxuNncAmpi86OrnR8gtDvA==","shasum":"69c4dcc7c34cd1dc5be87baa405652a634e8c622","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.37.tgz","fileCount":25,"unpackedSize":37497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu/ELCRA9TVsSAnZWagAA3rgQAKF4kMOes1CnlbjiFV7s\nYXOqQz3NOfyHuiw/zKQ+9/an4fej3UL2YNBSRbUvfLKyObPWDDcg34PtowfC\nO6z+QJg7eV+CCqlJuZcMVRk77sWe5q9vWFKOuHh2YcNMXbZTDMuLZfJOfm0D\nQzkxGGh6x4gA1qUOtHJdgECgqD1iIyLP5FIVTdPkPpaVR+2AJ8tDrw2wh5Tl\n/qGHsi63MopVV667DpesAU7s6A87gu20XzTyfNVXp6514u3FFDHRM0dAA/RC\nvRBf7M6xEl/blNrwU5bPysRKNHCshRdXIWs51In24pYCWmS6eIt+L6WfUZJb\nrwtfse3gmqMgnCybZZJE6o9oVcAZqT1Ck7trxLYKZBmEXnIXWm0MRhwynlXI\ny7UcyTw1qKZRdQYWKYgz6W1B1Tj8nuRrqGFmBwEINBv4Z6s9mfOINi2kgzpW\n8AXwxS6zkA/WbFB2+YsSxd8P9jXkaGfsOwc7uHQWNBibgEDzFhyQaH5Sf+tk\nHwav8rvT4dvWi5TNctggVAUn4Tm8r3UxsVS4C8y1vTy8y4BVHRJ8lJK/Qx/7\nUp7+W/KQCHkO9l2H1EcMmyNBpR07lSb5kGNU9w6/DvPMg29FJtUPyqCH/my9\nlqFxTcr5ZBe9ov+RNaXdaWKhqnc3iGGZLJ27XHdvdM1MzZXbwWisiLLjQU9T\n61n7\r\n=M5qw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7lZeo11iGVM2YXCJFcZeL/aaOESf55AmnmkKcUKfLYAiEA9x/HmOuzhCSAnXK2/QpMND0UuryYcNGEuW41QekJnIk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.37_1572598026979_0.5235572575996641"},"_hasShrinkwrap":false},"0.9.15-alpha.38":{"name":"@react-ssr/core","version":"0.9.15-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"65ca75802c648a649abd5e2103ac26f919ab5b78","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.9.15-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LIdhk2i/wfDVM+JCQAVS/F9QHoBqNCOZC04zTPQF95eENXxdCrPsBagE/TGiikA7EdAEq1fiLQhlyy3VxEnZug==","shasum":"68d00b75d7d96787d65b1c2dea5bc5c1891075d3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.9.15-alpha.38.tgz","fileCount":25,"unpackedSize":33522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu/MCCRA9TVsSAnZWagAAyQIP/1xUnPwY7PYeAzQoKMHk\n3DzvcVpGlCYJZkWZ/6woDLwylXa9/VtKMZjTxr95NVz+RZNahRzaCpgLWmGb\nUPeBBl8C1MrcBAegbkQXyHJ6tatmXKBSXt2d8tP2KOo5RYhZzOB2VfsX45HF\nolw9txQlOeIlgJGSIhdPJGen85HdpnDahCDQHd5tzoW9HRqg6n1dRi2xg6ai\naNOBNaZYh5hP1yE8HanH+aDkWzHqg8etjJvhkAZ3exHvfVZc8AfAqdp7FFcd\nbQbTUMOcPzDu2+3dcguApj6Yepyupx51bLKigR01HdvRBTqYunvcFMVRStVY\nEoAhc+VUjlqRWCXjjHeDPq3mD6xJA2Y9ADGazKobawoXsekAZuqy+7hLGtvV\nbnFey/xC9QDx5uNLiMtB5l6ekZw60jGL/tdkgRhp4CaEfj1jS2DfUkEslWap\nD5JXyIyFDY+OthNlEh9AbvCoc2ufqWghznNc7KWZG9NpmH6bc7VnkABDV954\n6Rh5Xy7mu+IMnlFr7BIpYW0Fu3LPfGlcrmsLMfeUdrY6Cdc9ZpZNivviwUf1\ngHwRShkdwycwiWnAF/Fcvf8UQJyl9Kke5wgL6dsRPgVrR2d926zMiMXaSPfA\nwczMB+zR4NxLAGIKpOQFgasOI3Xral6FjnGiQnR3ZjGqKjNISqMWIzsXqgJ0\npw6I\r\n=jLHS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt+PtUzbk+mh1oFJ9oWeLxoxWraPlEGhGA3bVGWRqPGAIgVImDz/jMzeAIGMSQU+L27gz0Yv4iOAD5kBCnrnuf4Ps="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.9.15-alpha.38_1572598529664_0.2977957159194282"},"_hasShrinkwrap":false},"0.10.0":{"name":"@react-ssr/core","version":"0.10.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a69c365141af97c8516a0af0a1180f1f8842a311","_id":"@react-ssr/core@0.10.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-xoGvJrf7C450i0OYXZwd1GR+NAWOGbI6FbM+J9OB0eSqKWcqbJ7aiLYoTmXhH97pp3xFbY1PNHQHdUnVsQS5tQ==","shasum":"8d29add22cbb6940517892544f04dc47465ab900","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.0.tgz","fileCount":25,"unpackedSize":33505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu/imCRA9TVsSAnZWagAABIwP+wZSP055clVMgsY2N/Ph\nFZAFgFx4XDQ6hQUNVYd7yZjLmyxvv0LlNwdV60abYQFJHsGW37KPA77FNjsi\nBTx7/cre5PzaziJTnLmbcYvMoQqVQQtFSFbLilxqhkem70ZXkTW+Euzj0ron\njmztjROCNl3LEm/HsckEJtpSZ4hUQwu8pxewzPwAOAyqHQE3rjJIUmY1Rvlf\nhi3adiSTqOg6IUgipzulY9ynVt+Z1jEIqsYoMUBiAam/JXIieQlHKt9xuGVT\n2NJohLAuqZkdFrmArKL5OlShLHJzskEF3ASrNLgWEZk2KywXs8zZEstD3Ub2\nRNvcwere1wt8rOyw5hfbhEC8d9EvYueU58C4nv/aSMgSOxfYML97H94IihrR\nQZ2zY72cRUTMLooQjzcX2ZheD6M5ddaVemUyqfJNxZHD3fss0oHX2EeNaI3w\nTzBUQCQukH0WZkO1eKKeeQCfEg02/OyNiNmX8lVRBqMbf2VGF/IHH1c8d1xZ\nlJxMrcIm5n/UscLGbEIcZsGiDJnQzyPnucThg/1BNdiEgIhSrSkMoWhj6p2W\nI2TgYz84RkupyHtijaPQAlxQy5K93tQHI5seR2Aqcb0Pu4r7m38XcndwXv3y\npZc0nkjcS9PA8FQwBLGS7OlIBeCFsBvigKEfI+ltsOhcZBRtiePioj5rhIkQ\nIZli\r\n=r0nE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuz7PshNhTB/df+ixZzJiy6tAj9UVf6zfL5pXPraBUjgIhAKx8VC9z+tUL9D4kbdDOvlreTTFPdxSuhUG95j38PkYG"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.0_1572599974243_0.05984980563139719"},"_hasShrinkwrap":false},"0.10.1":{"name":"@react-ssr/core","version":"0.10.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"462637de5dbf036f7aec9e8cbfc842425ff89434","_id":"@react-ssr/core@0.10.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PtmuDmtgHzAeE4s1g9/cSx/snvV0V0UlVcs4vA71HB7eISJFSHk3VkJgUi1DWRX/PGzjLGgRtILRbjD9ArV76Q==","shasum":"7c3766a7a3bd99328dafe8e9e5b37ddcb990420d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.1.tgz","fileCount":25,"unpackedSize":33519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu/tMCRA9TVsSAnZWagAAE9kP/RhuYEu+jBrHCpz6Jk5J\n5AcgO7RFaKGIOswsEiBJryTu21e6SU0wvRNV3tYmudKmAw14wOiGSFQ8cQCM\nOsBgareBrEpM9HlaXb4GCctR9aquSFiDvAv0fytKmTh/CSKb7Puu6LcusVsA\ncBvMmIcGXK1WS0lwuL1hFl8XZRh5sV294opdNN3Koi2/FTFMnJW7WpIH9DV1\nt4ILRp70X3XLVpjRnzf9/owAu1TVFUtyMxQO3Wp/+d6sgbeJL3MBcAXV24sl\nwo41GTroLUqV26Z9+8vN1JWcs7GRRvYnYqJx9UWDDLptTdzB2Sz8UvINsYtH\nEIXhdJQZXBnJ1wPuQ1TYbuJEQrZom39Xcu/QmoUFZaZIf8VBb+MmLIdFsmGZ\nGdG971+6PgD5UCOx8GcvWe4BM2XSrNH0SeXdgQKg7PEKJEkqQBWJol3vQ8t5\nWnbbv1B5QsxM1FYrCaQ0tUVMlOJbrqlNmshNVN4eXVpzZKCE1K7gfFiAuuF5\nsQzebX63uGJL0NVn5VUEr8RPvE+bjc+i7vpCulViiZ///4B5LvjPKEUbpezb\nSLP3lY0ulcmbd1cQnaReWUBV1D9Qj4u8akQ4+76AN/GpDZX9fnFo2HQeTVB+\n4rMPHQk3zWb29StJrC37TCNw/lhuw3gYNDglEE2TVN6XwSgt2Dx0opFq/9+1\npeFL\r\n=XX9E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQdHmXzcTNvOcGNKLuXQyTiN2iUX92ntV9VDhYlpbtsAiAECJfezjlFhBP/UJ6/zVwGTqDjDf5y5u1lr/YuqI/WuA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.1_1572600652069_0.05200448518357592"},"_hasShrinkwrap":false},"0.10.2-alpha.0":{"name":"@react-ssr/core","version":"0.10.2-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b5a235b9e1eec103341354d152fc86862912cd41","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pa/Spf3w68z6IooyxT5o43w4fL6li23tc/Ep6JdSwMHAOU3OCIjGSq8z3Ta0B0peDADNNlC/Fn0+Is0BuiaigQ==","shasum":"ab76781028178acde1e22adad9edcbe70309b2ae","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.0.tgz","fileCount":26,"unpackedSize":34374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvBsdCRA9TVsSAnZWagAAvO4QAKGjWBEr+25kj2HCee0X\ngXQ/io+WRnRzvRxgci9UbkJaGAtJcUBMA2WWKsMyo3g1h1Uts+5Y8DA+QbWA\nBziMxsyuJKSo/lqKIXA+cEzIxYSGctwvrH3R9SH2syYD2Ho4n/UdKcoo9ZTa\nI6GHeIU5tJo9tzIst1OlT0CBq8AZ2/GnUG/y8TXUU0Ee9jM+RLaAi2j2iDLp\nQw+ONsNCVroynN7fctvULxkVnuPMpreK4ar0NNH0FuVyWB44d6dEmiTY0DBH\nhyQ0nKR5G7GXUhxAw0pkHSNs8NHf5YCFeQqOy25Gvb6nLNLJnO9HM46w2Zoc\nqUYq8lVFgH3+Kek5VOJZT3zySFsVtZbi3q2DL3sgZmGwMk5MsNnLIikUY03y\n/Iqat0vjqYdQEOYENOBD7NOzY1qJyrdoG5gDBSFMb/MG5KTdh3VJMtBf40nA\nCIwjMBBN/8x4VCPa8Yj1JlGXWoWisZJrDkQOa/DXaHVt7MNQJhz2101gcfjD\nlCRDL+cgAjtbpbr/oho+IVusfMuQVxHxwFkMZ/SuQ3tttbIPNgvPpvIAIdQU\nhsZEMRAgVbMz9DN+a0U2Qjwo38P9KuvsUsRiAu4wdSt8+SzugPYaQOrT4ZPy\nrr2rwGnPXxLQLBMe0WJl+eWlZh3BWZ8wrqewTY8CM+35pbI1cIZleckWLnpS\nBvm0\r\n=/8Eg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLBl72Evn7cDuritca3ppq+alTJue4AqJpN6+VkX0I0AiBZ4fDdLf+Ij1G0+iVQ024sGAUNC0ju51Afxb/AtkBDlQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.0_1572608797024_0.691495240435724"},"_hasShrinkwrap":false},"0.10.2-alpha.1":{"name":"@react-ssr/core","version":"0.10.2-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"be74df1b05b16e41c2946c291ffae3bf2af77371","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3zAEiOZDVR1tzX6aCmq7Caq1PEXeKXdvkGS8A60bwBiLHJVS3QQFAr42CMP10aw+TGqDfkV2hkOs8lP9Gl+CRg==","shasum":"ad5d44113f48e79491eac7e94cd22e454a032e30","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.1.tgz","fileCount":26,"unpackedSize":34227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvByiCRA9TVsSAnZWagAAcC4P/2MUdB7ahVPi8iyz51T6\nxF+2I8T6Cmywl1RhoXxLiglafSLSiNIO0r/up3ejnbuOJqfKIXo28fbLWfCx\nBzo5i93OIfn/jLMdWmoeP5lGtL1yvF1Lgtktu+JC/10JCfUd4YGDfKz9hbO0\nGrsNNHJOVSXC35fqsV8WFs6QW1y3IrfNXOG8TP4V185cfktSY5ZLa6Hnk8jh\n6e1iIbhhx+ADMRMxTCHik4ixT1E7ECBSA66TCPK8jP4Vn/BRX25xi2xkFQDv\nZEF8NBbx3oTRv2AEh4SAtoOuTpQSSEjKob7B52fbdW6JaePhZRz01ZRXtosP\n68980dqQr3xW/v4Ecujhe36D5Zj4t/5WMSVfB0yNbykawhSxMOnIFM+StJie\nmHdb8rc4h20UY12TySI42uz9nAMAEIp/OX/L9hJNprk9o8WhnctcfW8gaxP6\nbZTmcTg9jz0sfzDI2+eV6XccMehTQReb6OcaN8lxImL6Pgo2kSHmziA38W80\nvPUBx1vCFU34RkYPz3sVZEGqbzOlGVDF9zIPi7d4R/uytjwU/Kkg7PpyrRbT\nG0asUNAP2s8qRbgqSKL4QdWz3Rf1DkBW95TSuR39aKcutTmVQ3mjUzv3mlLn\n5zEhYxA8CKTjPvhQrraeZ57dtoDZ+XWSN0cfMMQZ2uI2uWHJ+DnpC/lWvXFa\nsqg9\r\n=XIbr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDHYo5Yd25J30C0YT4wanKWOGMFiRzRa1xssoui0XnDmAiEA+B8Zc53JXv/3k4Cig8KJlLuavYiZPkU1RkXkFGoEcmc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.1_1572609186369_0.9738445276681265"},"_hasShrinkwrap":false},"0.10.2-alpha.2":{"name":"@react-ssr/core","version":"0.10.2-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b11136a94f700997aafafe0de24dd54418481470","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-C4Byaazyo3DCus8ZBqUpybBVZEQbIc3RCnFG4ctXPosyNZBFffRUdoBFv8bB2dFBiEGJBtnDxl4fj48mrDbcSg==","shasum":"d782bef8209d269d7c2aaf2d09a00bbc8d0a2aa4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.2.tgz","fileCount":26,"unpackedSize":34215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvB1aCRA9TVsSAnZWagAAtPIP/jsykE1mrHvPiutNblGn\nGHQQCAFyuBnRn4R1gvVAAwFJVi+zD5rMJIPSzZbGow0DM6kuxyYJZ0ibthsc\nSd17medBeNgoOD3lskL3yUo5b7gEupnmm6XIlxU7Wj3tnhh4J2ANgrBPS3PB\nGYdmI2sgnYp/wPzWTT5luhBb8FBvLEUssNoUllDh8gq6QZpXmAVSVF9wOJbZ\n7GEUNEQHWjYFfT/mpVjpnaOhS5xUVJznw0Ghc5WqQBniykkBO3/gw89HyDXx\nBGpGHQq+Vbx0Ip3oL/DkHALh7DrhOnOCk/fhtpwQE2xIIMZ0koxssVTq/3i2\nylc+ATkotNw3FwCx4XzdExlkGdw48PlfA1pL5TiXbPSejPeDc5KnB6wSsYuu\n4RcTTK5HmwccNkLVdX3V2HiGpjDcWm83gXd+sDaQOR4qwacUDJzwCC9CdPb9\nllI1MJR7YeHYCybG3GP+Td419WT8XRfKX9QMvepLUdao0wvcHWc0it0bAZuy\nzPZSxKeI5nY0IyhS2xJDDqMpUF1zWAGjkfEI8cJauUD0Vl5ErfhWFIGCvd4c\nTCJyjjDjrQlspjfw5wpK8tti45ruP9VkULaIRpvKeQy7i10lqVXq3VLDy6dM\nY9HxtwLmD4ueN1i3H/cn+5hwhKXKjb538IlmkzzDWdlufDhC7Ib06rpKsIyH\nyw30\r\n=OJ42\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCw94YGvwIchdal5jEjvS/S+H21tEEqWHX5RnDqjbUwSgIgFvSmm92wCwqGD9+c+SdgFzmpRKhWRT5vBKalAHD09k8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.2_1572609370122_0.07480208756060569"},"_hasShrinkwrap":false},"0.10.2-alpha.4":{"name":"@react-ssr/core","version":"0.10.2-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"60d80d9837dcf6a91aa5dc0d5e70b5ab183740c9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-0XOcBl2iveisN1ko0Q8JQ4lc2EEivf1spmyDfLxdP2+ykVL2DrKmZ34DG5VTpX+uWuw269JAWGeaUtxwp64zHA==","shasum":"56360ad9254d334c0530d0137f6bfd21762da858","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.4.tgz","fileCount":26,"unpackedSize":34168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvB55CRA9TVsSAnZWagAAP44P/1BhJwIquP+FUKcmgDk/\nJs04DpyuVvShqTUfTkAtuMqPh0Q9YcDBvCgxW9qaNY73SyItKau98ZvfVW0f\nLqXlwWkndCXZERZFCJS0Hzg5ZMppKIbpSedjnyziJWl/CKtPgkuZZ+IkPeT0\nhWOjY8kRX2hrB5jSFt/xU1k8y+YNeqW/+2mUz0J5+V/Q26WIoNyPlS0+dqSv\n9ahCQR3odgmocydjY1L3PaSuz4Y6MBmP1BgGxmgLh+mcudPEgXBvz7rwAo/4\noHyLy+C9aUPBZ8H2wWKGfjgTG8hjUGgvYc7kLWrJOrbpFcuBjW1c809V7Sn3\nmkXdQBETuVKmfzOSOHSfaSwXuriNWO1HauE7EUaz3fRSTld3u9pL79MNwNYq\nSd9qyT4qun2JhWgrseTq20uDIjZJwez5iq/6oFbw0jNuokcJVhBX9ziYahp3\nznbXbXjaoFcVVsCPRmZ0V8rbV+d8uufsAuid5LA9/NWjyKMzHH581au0nG8x\nUe3IFrlTDffRl1sivjYUO+n97h1lgtkafmpD02por/hnP6zjl85EvX85CI7R\nks8NPyOAkerpVifYbZ84dUHQBX3vIGsMnD6hwdcz4w99iP0A0ZXvLFogJOXA\nj1Xj/dNfL2+ASgyacO0AD70ZV3137UlySGSP2vGxr3/l3CSqX6Q4eF61t/tO\nJ3/S\r\n=rhUS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOc9H1lf7YjDwL1SORttdg6Lh0OZIUzuOhPJwGVOc/xwIhANS1Jc+HmUOmyq4tBhfTkhDS1V5nfK5KBzHaVoFvE5Rl"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.4_1572609657496_0.6483781218862434"},"_hasShrinkwrap":false},"0.10.2-alpha.5":{"name":"@react-ssr/core","version":"0.10.2-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b99384732aa411b19b6f546ba2c756d6280d0e38","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mhnhSZiIlXHnuNKdvRPvas+RGOOHAkA9J7uSxuQqZRY1Tqst6pd6t51LCWdxHczGBOuHpHVZTmiiAJ1sWZu05Q==","shasum":"61a3caa08423bfe77f3e11230c85fa3d658883dc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.5.tgz","fileCount":26,"unpackedSize":34227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCFACRA9TVsSAnZWagAA5pkQAJ6Vmdn+55lu0mErSpNe\nAzsVpdXA08J6Dwgf/NDKojzt92CCBL6v+cPYjuHx0IsniNDg7x6k9ZOvrVBc\nl6sNAC/yLfNuyKcxqsr9gGw4/rxzCsfSv0ifJAy3O5cM9ZnZi3SQPbVfRPXV\nr37oh4y7MEdSfNg4p7qdcXwTTB7wWDMcEluvSdTEAO4mW224PgqSJAaD0Xua\nYLBkciTvYqnqGKkpY2MaS2MYOCXt8gMOo3tByRmwhNeium49OT+VVgir+A/L\nCbjCditVY2UtAHw4BYlymj6THerpv9MPxBg9RsmVQuapmFOO/whZOX84/U6d\nv/3uF6eGYIqDiEOwz4sFVNTr7rGjk0UQDMbiM8E6MnZDUKx4dsUmDhHVk4pa\nsXMgZ/MXbZcqH4bW91byHC4EULH8JNepoqd0ggOAOXc5oRS2rII3ynOENwWs\nkO2wlf1WjZNvkORRk0gwzKOK5oVhsKHu3frY/INdlbufQ2QLTYzcG/MHOF8N\nR57FgD0R96nZPvuoCgIsiJ5cLIOoYOQr5EYnUVYOGirzC0Bl8QK6t+BWhSEe\nwk6mPy4ke0xScVFUpGMOPxJfytciUI2Ve/PRhzxWDbqXVCz80QBcUPqVdPl3\n/E3dqdwhIZ6wVlBuedhsnbDT3hcTNQHhUJolbpLHtzVofdUmfMB7ziL/mHHd\nfG4e\r\n=i7SX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbwDfdm1uhNVYPkQByxWjHNscV7HfGVVxvOrHpW8sbpgIgMLExD6jRZ6oGPMafJGVRuipNK/yT1UL40t2cZDvsruc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.5_1572610368045_0.7105759745032112"},"_hasShrinkwrap":false},"0.10.2-alpha.6":{"name":"@react-ssr/core","version":"0.10.2-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8e1d0c726f10013b7ff662d2d8551ed9fad70b12","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hLNLg4k5958GvKa9RX5JDHBZeS8I9IOqjdQKA7cKzMP6bmWNECbu59oFhM9UzE57hOLFdozJEtz3hUqois3N1g==","shasum":"6512e70a4c9208adce6edade0e9001344949efb9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.6.tgz","fileCount":26,"unpackedSize":34252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCGfCRA9TVsSAnZWagAAokUP/iJfyzmryaxaU0jgs9Xk\nSHu91yX3xdaaKETBfpCkq9u7Dixyr+MsiLfZvmB6Y1VlnIhTBImwsoAW/EQB\nJ7I/xFzWQ/rK3xMF15rDfgFWPGJZRxaSR9hDU+uCN28agaswYxPcqurS8Wx5\nSCicDFpfwa9BEkAX2dRNAU11wDsIbEJclgOKicthwLqCKCD05u3n7ERzSlF7\nS86v7FAZ2/5gqMk0Bjrtr2b7oX8+qIsYSRGTmEEV55Eq6Js/mgQDCu/JGpUA\nQjV82DAejYXC8YDxSNOoF8Mlrzcu5xwueir+8VdqQvj5ryBljFIz7Gq0K6hY\npR5wTLQLaCBRp8uecpe73pR4IuRvUVTeUmVITLqfyZG4wUMw1//mf4nAxL4+\n4dB0XWo1KdFGRNGYf3V9NBgskJMGbem862poB4oGtjIukkSdI3J+pTCfcpNA\n+F7PXww5roL9gxlWVAMFkTRAfxML8YWZQsveAnkJJH0vnCcKeJZxwy+SiF02\nJbncqFFfTFIWeygghdhOnh/3cFfGpb6wggTzVqO3lH7hnROK6aQWGl3zbfUc\nxCtDxIUc2z9a/+jXE4EJDNA8sYZaDQJvATJnGMlMWs2oA4tZSGQNnVvYs2ex\npGMF18NzoStIie+dw90/tp/aNT6DKrjGvxEC512w9gWNXPpH7yVSSgXu+nLd\n/Ea3\r\n=91GL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3Txu60xqZqKImHtbWJPXmyodCqW4w61RsnZYJG4bIlAiAyTLi7s6MdGAyJHJZFTOnIIBww0Be3xxUHYaIKXNPryQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.6_1572610463375_0.05180926164238331"},"_hasShrinkwrap":false},"0.10.2-alpha.7":{"name":"@react-ssr/core","version":"0.10.2-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7b76dff0b63b9ccc8169a5c056f0c53dd3345dbf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-isedNhMsGHftPfYa8SQp3PAt9fugIr+V4FmGs4QgOpi1Yp4D2Q4yLA7cQUj6hGU8fGJTQzWLKXIvOgf2ddylrw==","shasum":"4acf25dd7b35ecaa96b57c13497e13f6f6362189","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.7.tgz","fileCount":26,"unpackedSize":34325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCL4CRA9TVsSAnZWagAASwEP/13rk3uGDlYtYfmSSyO5\nQWXJMohEBsbvptiqdPt27dmv7PqgqrqpKz6ZsTll7F0wC2YDGROV7yujgZHF\nYduzyKmM3Pef1pjQengcTsd2N+M47RBx+4NmEMFwYsJsf7f+ELEzhdRiP/vS\nLUTKsJcIv4EBejKiP7QO3/GAK4KM1Zqjwc4OHz/rvO8Neh3b4CTrZii0NaKk\nILbyD1xOIEvEdxgSH0odi0/oVpBgfLmsQgjjFCjp9ZdtOtMw/6VGdUMWiUwk\ncZMLwVAs6T10fk6zjmWy3XbduhO/ZCUuTXhK+9VF1hR2yjrbmcyfMDUUdxjB\nkI0LDXhhrkfMsZNk9rL76yap6fste/jWdUNmM451yTAoFADJpL6WELirewSB\na6cTJ0dbSNhZJu5GgTCwoVXpeMD9bUZMdWjENfVRcnK7/x7IDChmqSGhp++v\nAZIihckCQV1TGBHuK4yZpjwwPD0jRBdo2u5+UE9r74tp6BpFsk3W9qBGqKCm\n2iDUMeB0DMopxDajZoiI4AsduqhQCf4kT8rywJSIpskdZFV1eH3jf9AwKxfI\n4b2mQIVObZZjI/og/dU1mDpcWWnBvetxsaOZG5O8QnXFd8wzzNSnBASCOlXL\nIJDvCVnbQIhDMCmGAobG/bkWbqyXC4AVUiZM5e2QgebfpjuLL+K9aatJGRTo\nNw34\r\n=iRoc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkIbya74ym5z1DGKCqRhacdS6uNgmkHFq9nftJFETpbgIhAKuXh+lGV+HUuQXNXmSUUC72clFMEgDblHPLz6I7Yxt4"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.7_1572610807951_0.1883006086412713"},"_hasShrinkwrap":false},"0.10.2-alpha.8":{"name":"@react-ssr/core","version":"0.10.2-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f0cbb1593b46d05b530d44766138ecf9aec5005f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hlKclCSm5xzh5oGAG/vDtfkpGKVja5umURNzrmVgZYDS6YWnYdNPTlo1e92yBI3f35xf/Mi30j+mozPctjH7Ew==","shasum":"9cbb22d4bb30ccd78b1e8505926d4690f58e1099","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.8.tgz","fileCount":26,"unpackedSize":34399,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCTpCRA9TVsSAnZWagAArrIQAJvjE50vUosuDbpOAniX\nwyetd5TI1dHGZFiJr9rzkuihvc3aWj5UJ8CewXUzKo5jBTluyxaKqCPhiZcE\nyl5JnIT+dtPzX57fP/TVvNZkwuv7F4FkyWHYIuOcnTSvVyYR2G0TFe5bHVPs\nyiXf3i8OiI7q1yEMhycYUOJoMXxuPWLR1cx+j830BO7qzF56IrC04Ar4Vfca\ndL6TkbOkz9sBGS2yry6/TKI4Y+rMFcy2ZKknzq/ZEwA0G6hFZik2Y1s7QqFP\n52X2ES8I8xKt3wVh5iWXK+YuLEEkWnI9guOoqjOJ8ejhPET1lNL3PBq2EIf9\ny8CRh5kp2XUC7pYrj6ZN8C0jV//FSkLnKC9qzASQHIjyiygkZIHS3Xel9udQ\nkiMzYngao4IT4SL8bC79icw2KGp9XdzBCnkkC7AqTNX3jzBdDbGXeDTmDULd\nnkJdRaP/u7eq2lNHusXTUT+2o2yWZsVEA8sGTCunAEu2dD7ooPowyg13Cf3B\nlm5Ctxvy7n7mpLaLkDCUNZ1IVTxlQdKWesyXyhyrEZ4+hwXL13ideAwqGUBM\nE8nuGucG3gTe05rk4lrXw6H3lIS9RQCxd9iARedlRkubPyjFLdwG9ujJT1Gd\nAI3/KUlC9G/+pyrI4z/dwGphnJevKiOyyDS5LIbCvbQFsfA9jnNLNw+28ytj\nfbDF\r\n=kOL7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0QBx2dT/R0Bb5EuGs0MovSxniIihcRBNZAK7JHhpQHAiEAgd0+t3CkpfPXSftqHLZDBHADD2B/0ELUyXT8uPIgmIs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.8_1572611305337_0.36999727385397874"},"_hasShrinkwrap":false},"0.10.2-alpha.9":{"name":"@react-ssr/core","version":"0.10.2-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bb9eeffd6fce6c2b94d81308cfad777142e506c0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-crZEvqzatM/5zmr9soZbNyfFhrlS+kEpaqSCm2LCOudEgNyq7JeRPBhX251zaBPeIFMeBv2D2GztL/91RBRT1w==","shasum":"3027b53b73e329efda931476bf09d0e216e3a044","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.9.tgz","fileCount":26,"unpackedSize":34326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCVdCRA9TVsSAnZWagAAukUQAIMbnzfCgeccYA5dz85p\n2NU0symuEyrcg0TzEqdEkGemFLfrVN7tYddkaW1z+0vzHMEYy01kNnD+GiNQ\n+JXffTSpif3SdJH/S4yY5sxTH8zUN+9XfeUP1/51MB3wM/sJzebIYijhrke3\nbAUeD+sCfoRtMAr3ywSj1Tl56uTjvoBW0dmcg6qRFlf6fGe+03eslAiIRuge\nXJXP+4Uaev1gkk+xIk8AyXZ5LygEYBU0AKfxF0tZlYzutOq0J9dPX6W3KcFi\nEGucRgv/3gjMnejjC+6FyzHn078dQQi6eZSzcmXjSpmXLWQxBT+zxpmmP1KS\nwmcmEkBvc8kd239NA6sds1jO8sk596h8lOw6X+sRbgTpT1M1pOeVEJcV4yAQ\nZbPCvfozSTC3p2lxkLy6C7g1SVrMg2DEZzBamMDH+blA6H2b2sBbR3K98kSy\nqL9k2BiUiN9ZsRcc1xgqMuBYEnbsMfchqUConWKMJBQGZDtwK03WVPow08VY\n7j+fHP943/0kvjNJsQaVMPhwmx0QTTCTtio8mkRK9KzVZ8CTdtTokxM5nXo5\nmjy1CzohDHh9ScH11TM3DTapXsa1sY5HN3zKh7uP+/AAd3ZTCRjLPjAH8u6h\n1Elkh6EzIkmlR5R6saTCMkO1gHtHxXLm37IVfWb0JAI7zK4okI8fUc/khque\nuu2a\r\n=aena\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBnbnGeLV1MX3ERi+OTFOgMUmI+0DSdD2fiZfXKAbxlcAiBkRhWvZ8KDnRejKmVW4xt7bW6a6go8ylE7ktTHMxKwDg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.9_1572611420837_0.80816819738514"},"_hasShrinkwrap":false},"0.10.2-alpha.10":{"name":"@react-ssr/core","version":"0.10.2-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"302f30b7c943fab1ff43a179a739da66a53ec293","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Gh7ZDAJqez5OX02JT5pyi+wyU6BTZ7SK2k/twYsnMLT0Ub9WKOu+07l0sskcOs244D6GpeHu+FAnzSGA3WqImg==","shasum":"5058810534618c79d2c511e92ec1c20ee1ba5dbf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.10.tgz","fileCount":26,"unpackedSize":34306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCXZCRA9TVsSAnZWagAAa20P/jJCcHYvU5jum99jeNhG\nhC0ihAg6RUjr+gy2QFhVYZCpXWyLUNKnJJesd6Pz6LoSjS1l1TWyenPWDR+Z\nigMRmv4Dysjl0p0boYomnM5MlsUi3rQKR3A17NsBW4VaogzrErUkJ6d+Veg3\nQmJ9av0+4OQVV8HnAKDdUHA58bQxyKa1OYZyY+VtwNbEkUm/Jhi4SX6Wezne\nzBQSfA1seSmArHCBhC9aPz3k1qDdBYIrPax+0uQ0SIr2NbdsGQ5Uj2QKoAif\nKTbORTb/Xx/zy05WUmiCzo2abMBwWWXOTXdksNfZNC1E7aod5D8yT2eo4BKB\nvQgBtAtdA+pPnT6BJSZPBWmj7VkqZVOrS2PESuQ0/uD4tfEKYqkw3oHOLEM+\nAZ/5u3SSexPgVWbLIX940QUOq974Ws2HTROrjMXitbGjKK53p4pvLppLwTb6\nljdk3tljB12cq8cEW8lkoQrcaudqts8Dmmy1MDJXuZf/nCBT8bZ49ogj8LAY\nuLT9xncRJhM+KHOIyNA07xfkRbdguIMff73xPbdoVeH/EGFxVAYwFWlvsUmI\nZplhUmJEQr8eTAj2pX57/vuLMx3Ur10fmL+H9QXnzmtFm6DGa8CSJGpJ19rj\nigHA7Bt8XhOTxr3jE3OErJpzjT1RMBsHokAcGY60cNT/Nv2OdFNgpoGikhX6\nVXU4\r\n=BjdH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVDBp8IsWpTEqjPQsGRtO5jTfsa2cI2p+Sw1OQBAwo6AIhAII0sXDKbY/j3RR2vbtYjnrjA0veaKpFZYOx/Me4GTz/"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.10_1572611545163_0.6056154121375474"},"_hasShrinkwrap":false},"0.10.2-alpha.11":{"name":"@react-ssr/core","version":"0.10.2-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ccb780c15109e74b7858c33fdf7413652ba3a33e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-W7q55ALazjCvMGbORvlUTDF/s3b6XCGB1HFQ+92Rs/QHFR1NZVB5CaQ7YR8QLUefOueiCAoh/e7Zui1KqB0BwA==","shasum":"fd4854e10cbb63c5afb19c9b39583de4169dea4d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.11.tgz","fileCount":26,"unpackedSize":34301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCYoCRA9TVsSAnZWagAAwFwP/iLaKT75YC87TM04iqHy\neR15J+snXM100/QlAPdedX3YGeaKEACEEGtd5ScrGJlxlDjBPvavmS+2pFRe\nyft1lXYYfZPiE5SwSmcq8Ht60UPv/nRfDHoHB/UlbzaapQeulP+jKg/CR3zV\nXHFjlDZNfvTc3Xw7v5suvTGx/p9LkYl8IAGgp24RWlU3mqiL+s4Ayg9Ic8ia\nAKPZ5p7BerACPfWLtIQc9LgpZJ+UfKBYdvvTi0YsgcZS8cW1mVMO1YDlhhh/\nd5sYR9AK93m9sJuWvSHL05TW5ZfTKgBUqi6rKB7xo11Vk5zNmv7sGzSxbel0\nSv5elBujo8BZGkUAAyfPNGlVvJhvAwzXS8M+XWEr6PK/L/OZalpWv9SeCbsE\nGQeQQm7Haht/z6rm9R38geAdARF8oyuFiBjEt5AQXEajn0sc7YB4A/vaiUCf\nMD7lGAzQLkFp41M6Qb0Jqej57aaC03udQHs8cS3Yx2SR/R0RqHcjRQjVT/xB\n1s90PTqA4CgRGm+IjyJOe4ZkEVVqso/vRDWzXwA8KLSwbHKvpPD3aRvVMaCM\nbIxbvDwfe/gJ94AswFjav4am+06b5jRXigfSQO2/v00gCmccV+U7J+w0f21Z\n0XW9wPPkbLBGW1YsB1wJmtj3MFCI3Y796xtUpXLA4GkMbl+PVxO8nKNgcmEV\n3y6q\r\n=kG9Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvAPag/8UTWOIsJ/DKjw4YVsPS9yGM08vnMnk71Yz7BgIhALZKnx3e9p/y8KpX1DX6HbJgJM6HT9FJes2JdWtIOJjq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.11_1572611624141_0.5878159450494467"},"_hasShrinkwrap":false},"0.10.2-alpha.12":{"name":"@react-ssr/core","version":"0.10.2-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"470872ccdba8d1355d154d4e6dac0f23e5b8be55","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-uhQ1PKtaua1VaHg5iHCNDiFc9U2w3uYbLsFiM3qyomdZquf4FZFvX5LSZZzZXaEq9uHvloMvqR2JH4MfYuNHUQ==","shasum":"2d879b9289d99ef113913267e224d270e6f7a7d4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.12.tgz","fileCount":26,"unpackedSize":34329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCbRCRA9TVsSAnZWagAAm0wP/AzeMTk60vFgu/SwAmSC\nAuJB8G90I6GbPVmZ8OOf7XgecFTVhNmg5PXZYYUY+VMAInmU2FuuxUbpw10x\numnFAOeTzfjqCqwf1U/dpnKniUiI61Jikwtz85h4i7NHf3E9rw96cUuuO9aI\n+XD+f0bcn9fp6LipAobgA0k68TKjQ8WmqVqtGLmgbfbkWkW8tw9pgKA3X+SJ\nRp+cYY+++Q0hS2/7th5S0Y+1N16+b57pIxeiPJzMVidDlJWBrkKiSopGGDcX\nihJCkfWrcr7k/Sj6NR9W1sfSUllyOeLdFBNrHnaRUCQE/bd2MpfJYdcGV6Jw\nUNoXf1TUV3MEbszoLsvmhMQMkUeVe3z9lftSerbHhLeREqm0wNT2gYYZ0HL6\nkmmD7NpP8x6CNLUlRMMCu/Qpt5OKIsKtztXYM3ZieXLEVMBIFx33ugOUX5oF\nXXk/8feyYEk/Or509xO1Pi0pyygXXqWlxFH37UC7gXO2L7bxRa5wj1S3LulI\nsdjhLXpTA6YCZW4FbcKIKi3K3fA7hqV85mEzIAQQGBw5jH18ptH6GvYpV45I\nlke4hmmsTiFMZ41fQ1UrfwBJzHC/O2C20Tecfx5gaOz+AZIX8fwdDjGEr0Do\nJTDZ7pAtWX8SfyENFc3CGkfS2jboFkjLgxcAce1mirMy685oGgr7v1+XazsZ\nOCk7\r\n=okzc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8kjaYd5JHI1rTBIhJaocH8bbOWp41Z1wSfc8eKL0YrAiEAvvdzBiuA9nq2jiRsyyhNRQ5LoaOXQLHGjyOxPLfB95Q="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.12_1572611793490_0.19323075277526192"},"_hasShrinkwrap":false},"0.10.2-alpha.13":{"name":"@react-ssr/core","version":"0.10.2-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"49a8ccd0ec0e4de7b9a394c78b452833f404479e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-cF5qlyZD2rNJ9HAev3CZZb9V5meAgqQXbZpnNjPWH9rQzbA1RW76C/vS9zT2PHyX3ihP8/phVotIpEXrjiO41Q==","shasum":"fe51128f99bd0374e2b309322da15b81bf95dc9b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.13.tgz","fileCount":26,"unpackedSize":34391,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvChoCRA9TVsSAnZWagAAMAAP+weNTGQpZuZ1brjRAlNA\ngCGwTIB6M6Fdof87Ktu4+4+FmjUlMVdmz+OaNiTu28xOc/yhA+oS7vTfsFou\nW4muT7Mb/alP7sETPSyWbVEBabsZPlDRbyEFgNnnJ8Tvrw1djSeatWWN3t/H\nfqNIjZoCFypyqvODTvJklggXK3HJfH761CObZbRQK/IrDU6w/GvR9Xat943D\nivf4pCjpinsvTqGbm4FAhci1OCWQz8f3KUl3vWSsoiVQB8hvUXgvPNu5HOmD\nRtblYHOh9Vizdo00SklmEyblh3OaJZVTxTT5MBVWAzb0E1jjmbdvR/GBWTVG\nICHQ9NDbIAIhIzXPG/08iw6wj6dg2F9OziHJszyFLLz7lYDXYu3b2HD5Q0SQ\nvUF1ltROLSmtYUDjvp1weywKnLkxXMAcpK5yhWeHC6hf8T+In4VhG4PvgH6o\nDDBFOCt22pyx7STM99YAqC3tSt4qrGgWuuFNsV+6ayGHWjT6P5tfmn8M82IY\np5oc0FyUfH49U8AuQPi8H+eFnGpI9vxNDfia2vfxh/Nl4/MzbvYzLbynsjSg\n65o8cqmsC17haCMPXaFSDv+yHtxjdP1t3bN9ux0x9DT78hws+MJS5BgobnVV\nLG8eHENKpP0qrcAks2FSWREQRI+Xqfypjsi2bgjlQooOlI64jevV31PDrEv1\nmB1K\r\n=E/cZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZGql1fPKq58wl9pRE9yejDrKo/rEBuXwQuPy538/zTAiBzO06XZ9bEtycC8lIO8ajwWb8kVqAU93H863n/I0EDig=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.13_1572612200550_0.4303897934913061"},"_hasShrinkwrap":false},"0.10.2-alpha.14":{"name":"@react-ssr/core","version":"0.10.2-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"06a47306aa671f906ecf64c83838953e41850454","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-652nCA1qh+l8ZYod71KaRDh7a/guYPVxu8ROHrP0s3CP0ijdtsAl6nRcb8aBmcTj5l9kbQxqqM0kmcJ4a1aFzA==","shasum":"802e9c5156163c320c64006face64b3fd4df3bb6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.14.tgz","fileCount":26,"unpackedSize":34458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCp1CRA9TVsSAnZWagAAK+sP/357x6X3FGKq7//9+q/z\nzuVCOxIkKehbyhVMR1puuXU9Kr8RPlojaD18ZeiS7U4s0vq0BjNgarYFSXhI\nRGCF6v9mRnx/tmcNVtKwjucNjIfeCfOOH40t+bMBH8nVzVp3gjyrMQ6Fviku\nFtuPExjjjFaB/5SjHIxe6T0MVRLZuzDeNcLQDc1uGSx5eQVc6MkOBA9dU/vI\nD2ASjIXS+yk1Gt09LkbxBqrDbTvLz85Wu7xA4KA1p9keU43H7G2yMsAxR8Ao\namuWERABPfcZsEeupVGXLw6x+kyQbc2j718dZnNN1XFVb9z7y0ul9d037GCe\nKGakPbb2lLqAqJ3zL55laF5T/JnJcUN5US5Nx6SSUrM/fZtU5z6LdlZh7X3r\nLl5m1tMd58tdht4wEak0U2fMyOedw58vABBk+0IKUps6Fe9RDlAFXf/FK5qr\njoI8+O1Oxcdf6aaPpEK3o5oRQEhYWtB/Q7LA/PkdjOdT/IjWvgaHjbNIpoIn\ngi0jVPcdsOLFxpPyGAdSz60F5Ref0l8d7oA+0iDT51/p981CLFc4lwVcBUgX\ne1SquBO6zxwMzBZtj6HKNWyEetBudx9rPJ4E3slrOFKhZI+Mu4aNOMu2PRuL\n1GOM5RcXB5150aQvQQbuRN9bJI+2kUqcFr8IhrK4nmWIayHwkCMvi6DhQ3Hb\nteBy\r\n=Azi7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6I5zY/JrpaVGPqFB4P1k3+MCpff8IAoH6RPHcjycb0AiEAnkyOxgIfZT1RfNoE2l+hEW5yaWIAgK2Z3AGANnYHoL4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.14_1572612725393_0.6083245879190897"},"_hasShrinkwrap":false},"0.10.2-alpha.15":{"name":"@react-ssr/core","version":"0.10.2-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2d2237cd782da32c9c8aed871e8e1d8eb1381520","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-GK0vOxoZLQH/vVgd9sStkmvylmZ4mtlJw0IqJABtv/NwtYwmCueIKgTEDNt44xV+JjUgbpkeuqp7IFEX+PZOKQ==","shasum":"49c5a9f7f89c445125ef99d79c1e69225e3979b5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.15.tgz","fileCount":26,"unpackedSize":34482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCsSCRA9TVsSAnZWagAAKJcP/j9RAp8eiZ+Fh5CwE+B6\n6YuUWDzdGKsq0pvF5RoJwK6g5U3oeH7ZoO4E+A3bYwEz8X1fmkH9fFHPKcmy\nBdQbhHhz48o/rN/gGC5iCrh/Ds8YIfNg4cqaVsZS9YWFQN419vIxBrXkogMh\nHDGZLQWo9vGxCs+52yLSBxgMS2EA3JCeiAhV8KVeeBwTUpAzDTxu43S5EugR\nABM2sdnkm9EPAhMNo8b7rWedSobK83di1Q9ban58bZJepjGvoFI80yvs11i8\nKOdMFzg8rQUXeI1LJNksYcBwOpXzfOcLtNCtOPJU3V9jceWrzJxro12xLUbD\nhlRZi0QCz3pjdQEOc3c13fW+LlPKgG9KK0ft9emaHHVQOGytSH3kYvKuh7zn\n+DOyrCfSzULAODRrJsgRunJW5xL/R48AeDCdRk7R3NLLJc7KrKsWq2vhonHD\noTL7kAM1t8Mc9PABwk/egYZP6CZSP8TVb98emHK9v17naeDNOcTwBLW0ALqu\nKv8naWQFhN8DwSMqO1+TFBeZQw2UGS1IhNjfcLDGtGHLHOBk2Ki3Lai5Lnp8\nalYRd0wmAFtrZ5JsWXYWxGCBXt5+o0Dxej2I0X9g4yKguKRnGN6Itk5cql1q\ns5SVugcuzoAJPI81JzqRCpbKIDd/6RHvXi/pH4S5uc1CzZkjGLQ0T/pKOXg2\nUpoy\r\n=QtDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF63p1AQ1e5YRkXAWzoO8b4GtaC9GrVMPlB+ccw+4fTbAiB6UPp+M67l/d3OjkhAj+s9MelGCHsBGqoKAYjnN9CUjw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.15_1572612881757_0.6419404460238338"},"_hasShrinkwrap":false},"0.10.2-alpha.16":{"name":"@react-ssr/core","version":"0.10.2-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0f6c46dbe01a48b82a9b8c470b4bf7ae6c65c148","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-7DJO/lhdMRE0061wNXNkHzNzTexE0M4cTN4nJbTir1rYolOxkshgBqS9ddZsWOPwPrrcoJSqCseYxPdktQ5UOQ==","shasum":"896581040f9757a633ddaf0ee4ca939f812763db","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.16.tgz","fileCount":26,"unpackedSize":34557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCvyCRA9TVsSAnZWagAAPi8P/2191XLPVphuCfpLwD8c\nhZfX9ZDgTQD/mfOQPfAPF709FDWzmgGsmnD8rEaJiB/UaveyHcRW2GJBfxyE\nzpxBzIVS/7fMPZlDM5ouB+1OuWQB/0iCnR84cvXvmyih/Qj536LiPtaKkRy/\nE2FsMZ2XxqCGZW/4WH08fvhZqBLakIRFbCLuyUJgKNZSKN4+vNj7OTuPU9mA\n+I2yGR5/AFtAv4ymftT/6iOGtsoMyz+lSUUnnwE88a2bNbr3dCljAL0Nukkp\nLQPxdcIGw+IXbh2M5n4NpBzVJ1hps8Mv8l9xoYq+9dUAD0YyGeFrMYimV4fV\na50OT3bpdh59ecjDmmX770TH8NIh4H9tlfJwfoCfTwRVqvpMf4hvZ7R+BkPk\nK+6VMhp7BOoww6MpkiNxqg0cnrSagylx8BrpDRhG6u68fiJ7Dfdao4shuwFW\nIePJGfu1QEXBtHCc983IuHLRkS4rqpo35+eeyTkeqlnqTDJ71lgOcTLBtUp9\nrEvX4kvXwzBr65WhPAD/dfnKbOGJywfNb/DJKonQxTh/s1OnrxkPCbfXxIft\npGaeY6xoMj0cmzdgY5rcV0JERD+B0KGN9rcJFlHFZO7F4FPTht0+5VKhSmQ2\nSJkd8VwraAbIadYozYOJndaroBuhh0A0tTlTjaifzqiAw73zqiyViFES6hJy\nZ0b7\r\n=gqBt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNeyHrmsMnMSNIUnGheCnlGYEqEIHwf6oDaH15+Pf1VQIhALSm9PNsfgB/cX4/xBnBo5mxQ1+vKO7DU7rwNVFDXKz3"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.16_1572613106525_0.1215669965845938"},"_hasShrinkwrap":false},"0.10.2-alpha.17":{"name":"@react-ssr/core","version":"0.10.2-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0cc6cd4cc82ff6f032e15c03435323239e3a583b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5cg5JK0B9vm5ZKCaWanoDArum8fi6cwuZ8KgNwSxvZYxqNv8ellHgYRv5kMKgWwVNW7cOSRYDdPNG9aJR4Ud+A==","shasum":"2dba632308f6b8eaf64a9ceb11521680ccb550f8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.17.tgz","fileCount":26,"unpackedSize":34574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCxwCRA9TVsSAnZWagAAzA4P/2WMpM5zrloKtGyYCvy6\nj6Nsf29njW1G0QvUx/RpL7T2RPLBK7Kz73OjRMyBS7lF/Z4YlGgGZkGPHXo6\nd9cFuLx+ar2t0KB1EjdP7F0DeUaZRdXhIbPnBkJP30u8X9CQIyelhdVEO/3V\n8lzxIo3H7LsIAzCnMB98ITcJ3JCk3ZsMblxpuEi+H5XxE+Xm/X1FsFL3bi1c\n+cAi7+aCHnw5YFUdLXFVvtEIZECEeq7cMRojMUiA/8NimzO77FLmPpazGI9k\n4uvtEGVZgePOPTzWb6ggkKrLIr4B+Gr1rXVNgLhy65hpdf1fmTMU3TxFrW2j\nCxS0c60zgmMDSCoiMAO5D3UHuM4hSE5AvQqtzO64JwYE/+lToH72/fKGYJkm\nyZuyArCIhGeNolPQqmKUwuR/NK4yypjiLEJm73Fc/wa58v+EFtGdpEjCAEHQ\nd+xgTutewNgaL2Pizs5jZz7QKK8SvKU5SqVOsPcmUTqd2xgm/j8dwQ1D2QBV\n+XinRBTOAjWUatbrsCbYVo7RepZ/lvH7Q4Sey1yL50fSaqGUuzwDJI9MNyyD\nxEFbgBfb2UHfmmF5WSxD031TrYZ+g+JARILt0bHqhV2+Vq03tre2EqTuky58\nEYtvY+nEfz0vGarA82GQKyGmqi2+tSiV00bnSpnlUhvBYi1CM53UdNtcp3/H\n1Uon\r\n=pV+T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXwisQyiz3/Ohv0plYdpvQEUetEQi1VdiZOMuyBSDqCgIhAM/FE0c31f0koLOjixRc0jTKQXBUuujafeA7bs/ph2jI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.17_1572613231888_0.06452950262064405"},"_hasShrinkwrap":false},"0.10.2-alpha.18":{"name":"@react-ssr/core","version":"0.10.2-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"28488e4706b58ecbccee91ba6912c8aa4699a736","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ws5cKmwXyzvtjhKY+nbyrSyfBnyyndPzvYx1CqN3SQlMaZliCOyG0mCjtggesAbfWhyBXbf/MgyQnKAavjfqIw==","shasum":"5b5ccd53905fadbf9489e566e5545a9d222de689","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.18.tgz","fileCount":26,"unpackedSize":34579,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvCzjCRA9TVsSAnZWagAAjOgP/0IivUEJeIKE45jQmCf9\n8ejb2fxtRVLOY/XnDhBLRuP8V+DJ/oOkQZFgv8PFB7Xg0C9/b6t3TLjIWWVh\n4S1/5BtxVDbaKv6WFjBpBT6Q36Z788eCE1aQBWbAyrLIwyA2q4HE8d/kSZdP\ntmxSoUKrwHRGzFCuU+3c1tL8ddnAkevWzcGjf8LvFkI6l8v9qAfzJL9ID8BU\nhF7aIZ8lNn5PDvIzTR9qPhhruNDPYxj5sBNkBr7OT73QLGZgtLMOBBoF0edW\nAFAHmQ1a+VToZY19vLpTxWX9TjVvG3QQqDUQQSJuA68J9xFIL/adbzkYsxGE\nKgzXbaq5SpUVm438tLRqJlUzSIvipNB+Qg40ao7PkI42WgazhMOE8xIgmcr2\npmKn7s/3sNf38D1/AJNyLSw6YhfGdhC4UVxuV4HZUAEuftulcft+8AGioXZt\nvk5fg92UPjMuIUIR5Ng/9tYjCi2SAHrqdZ4bw59yoHN9DhbdmkYyS0NjhRfy\nDNTorrYWjj4cQxh4YkEIdOke9OYLfhhhXmyUo9K/oxT6z2XyYlAil/ZvteaI\n3ydmzR46CqeJkaSH8d2rIgOMoHJqdfQNw5N84d/5BCinLTUSxDdPxToDVY8f\ncX+UrfRN++IbMUds8HhdyhbS7KqcwS/TbOfXDqr7WsmP4UgPaLg7CZuhLoUz\naGZ+\r\n=20G5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTx23dwK1hZGV0x1YP7Gwx8E3gaoqmoMVh7fTP5uGryAiEAh9aArfydkVJb+RQWusmjubuyg5nUJwEUywRamVhbiH0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.18_1572613347237_0.7787995281678182"},"_hasShrinkwrap":false},"0.10.2-alpha.19":{"name":"@react-ssr/core","version":"0.10.2-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dcc02f1918ec96366143cf941b646fa43f193a52","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NgwCjubsBzaKcR3/9t61X40F5w6BF6gyLTVpItBLdn+CHFyYSvriiPCBZrD42HmFBcbJ6s0HSYwTvHfcgxRpLg==","shasum":"02d674b574d1f6f05f85200fa383c16bf8a52ef7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.19.tgz","fileCount":26,"unpackedSize":34618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvC5OCRA9TVsSAnZWagAA6T8QAKBLxy0ldxUMQk7Bw6rv\nPsHyb0BZquQISs2llfBMjyl8ma3vyGc1ObuBXXwuUPKlmB3+4wztX1hxUZt7\noL6E7MG817KjTAELUZBXMDcoW+BHno/lvTtEZjFzn7mLtCPVjzqVg+L+d6Zw\nl6Q3JVd6nSf0EpjXbOmDQ7Va2FWV69eFSh3BsFpEDeHXUqDpClBEiuqynqMr\numi9SeitTZ+6/x0xxEi4R0XEGbxmE4lRXn5aoH2ozwn+QLu4aFcCefF9eqy5\n2ChZXoqb/VUGTNw56CLypbrdiKgFxPIMVal0ddrlJ8/b0Swllu8neHhE/uXC\nhzikw1LLhycb65cmg1NBP/ERoJLagnUwF7n8KmgxID9uuQgNP91dyZLVvvmP\nBjMJSU8M83AA60i8Ov1hu8vCtGsmRaamXNfJD7lNdQ/jP4HLGibug+MbOyiV\nxpadgRGan6ZhEq5RaRuT1KhrwURWOVq+J6wNSM8qyGw2Xz1S5QYHOIgFWvU4\nFbjCfrm17V9ZuhZJ5infIDQlHub1vMU1CPksH1U2y1vjQtG/Fn3REFFYFYC8\nV1/B9HL50dUaU/vuJEGxwBS477gzUhkxyIyFfRYUvyRxB3gx0IyM0kf4Ecd4\n16HyIH3z1Vmq7sdgrnmNA86yWQbzsQWVfsFLl9M1zE5drG9/zKHnU/ZV194T\n67/G\r\n=Gotc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQEhanXGrlaJx5r6EsCuuF4EMXlIMjrIZ+MN0JR25RYgIhAPUXoSPEpoWaq4NNZxuibE8BcRP4Vjrws8mGPoD5UyPX"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.19_1572613710157_0.8025020236285854"},"_hasShrinkwrap":false},"0.10.2-alpha.20":{"name":"@react-ssr/core","version":"0.10.2-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"61d405df7c96e2534d486f8e6a8a38e22865cb47","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BgZLyutwibXZML8N8wzzsbtShaDDccs346f4cTTnRSuMFdduHCAuVUTo4I7gkPHKz2Arz7kGFuLKqiqfJj+Keg==","shasum":"efac4d58981e917a3cac43de9059eb9863092433","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.20.tgz","fileCount":26,"unpackedSize":34627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvC6PCRA9TVsSAnZWagAAw6oP/3gUs5Z3oK3MKBByTb9V\nrtsBjXF6DnnjwQErqY/tmja1pXCVRyszNdN1H0UwtduFZ/FIjurRO7DH4TuA\nG2crHTEMITlU6ec1GqnchMmf6TdhazVfiCQbPkpyWXBnspuwCrNiaONXVvNf\nNof8lp5YkB8aCndw0TjyyESLVp/MDY220Pinno+NKDIJNOj+Ok+JbyAUDh0c\nWNFAuZKlqYW5VCwr0l8IPGZTMofe0oYPQTpB7+LFQSu21LqlWf6XMjJfiE/B\nHSK1qVPD4ipL9NiRI7xOmlhAA+xZYGmt0plyTCL9vZ/wOPWoW3KhbMfdDqvH\nSp9jOkElcRsAP8bNNSdtlB0sqWpZM9hyFDdzaF20q4C4w1Xs47tOA0E70guu\nn/ydPU5ojvfqoiq8J2p/XQ6YFHuzldWNfXejY2CiZvSiACzmKYy2NM5J50oP\nQRCvCAKqoRj6lkWkbCSaPTtSGQaJhGZX0gne1g2M6YyaKPcapdg0v2D8Ly0q\n1QKmYy7fedTdWbh6u7zObFSuxZSx2Jc7dRq1/g2QNuKkSELY3AtU8AfPU8SD\ng2vqlZ3o8+H1FfkjhNFWfJh+p3FeeDSOTAXMW/7SH5QBGxjJ4uMRLqAIzyCA\n9GIOAMuMu8B9UcOMPxZiNbOkRGlvMAyH5Jtn+r4Rf5duAAi4ylXDQKzMNejP\nSPcs\r\n=WVCp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDivCKrqrdZLy5On4iW/mUqBPhXmX2Cbco3hCXHcSFZGAiEArY2/9SrXxCiHOpm0Kx/C1d6QTGTuhpnlInkr6PomBEA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.20_1572613773899_0.09354262201668129"},"_hasShrinkwrap":false},"0.10.2-alpha.21":{"name":"@react-ssr/core","version":"0.10.2-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"21f5c3a6d7682c61283c05c8fde5f88500e6cdd8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hffl3NfCdK5jgRoZx0zS5/2tA0vNDOdjEs5vyZhb2BCbrDYtFBI/EEt8QZEoxsejaBtQjhpn2cEx42rTto7tgw==","shasum":"1debf10e33bbba15cafc303a9fba88ee3809a254","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.21.tgz","fileCount":26,"unpackedSize":34609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvC9lCRA9TVsSAnZWagAA4fUQAIHX5uh3n8oPjhLCb0Ud\niopyRmpEZ8MS9iQA25C555+PSkCfU6AFBL9CRj6ol22kybKXnf831lDrOcxR\ndHKcRnG3acHfRgVOIzry8ggjYj82WpjDeiDztK1XGBtiwN7C3dlJcp5aDv/Q\nD++RgEdiWi8kI23Mk+0MU44LkdXmlmNmRCbR7pZcrGKLzeXHOWqy/YzDRXxn\npwhd1xwYAvrKYx/Whw605WDBA29WTF1KgDgAMe6zgb8Dr78kcM3WCPAmMYw0\npeX8x8tjch/j6YCS3f8c4VQojgKSsV0Oifh2NTzI3bSc1AxeTAzy7Rzc3g53\nVAIUUC16lJExiv/ePTaTJYPoKUI5uEpGOKzPuCbbB343jc/IxSqkKx16ckIm\nhydYwxaMtUKKFxnfuC1+mFVhydVmABH5c6B4SyHzrt3iNUVwT1GT6BniiLWl\nhcZOHmlTPhXWOrX5Mj21tlvJ7gZOZtP18LnXgd99BvTbByeLPXIyOE1OXk5u\nJLfPZqo4sQbH7xGeSijU//fLzfZ0CGSyW2FpqxCApapt5TU3C3k5T1PjEhUK\nZtYTRGzBIWx7oXLLgpGCU/fM38ei8gDFvM1UhEccBkGc2tz0UEpYxGl+X1R4\nMrMFjztSIuCL57DvtuF58vQXSOtRegU6nzVGa7kzWk1w0R3Mo6J3i8Bd/cSw\nsXPV\r\n=SM9t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGSlNxRJvtWOKBwrBaWLuQbnVF1GUqRyXYuYll+qpFl3AiEAjh1YePE4Dir7rVD0s5Tu+bDl7Ze6/Rs8uF9qSxccuAY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.21_1572613989401_0.08662596952838753"},"_hasShrinkwrap":false},"0.10.2-alpha.22":{"name":"@react-ssr/core","version":"0.10.2-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3d8b28e0ed8c751f3b22b3c5fcd63a730e438482","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bPvEjOiSvU2Y0po0zRGZGlc51s40OmXbr0ecMShvfAqvtAJbH2VSyxztTCqabkMYARe/IE0Om0bdLdHb5yQefg==","shasum":"d94f2dd082d195b49634aefc5d04d0c6eecbec68","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.22.tgz","fileCount":26,"unpackedSize":34663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDD3CRA9TVsSAnZWagAAJ/gP/36faBT/e2E9UiSkyGWP\nR76TTV93aDGEGOWg73UFwGlQ+EZdR3FU/A9704RmjnJEWFeIXTcr31Z8Ea2v\nkSegQoYqyJn+DeTKnzy9PGmWec2hetllFK1DRTQwPvMZ+xhdXquUgCdnpQGo\nuKW2CRjPt6MpojVcpUIwymb4yLnNVnhXasLKZhDdH1X0O2VG5sxSyz1LUiWR\n5C4cidZwc6tIS/8hhcXJQr8D6IGlmpR2JenrMhEs5hum2GQvDe2HUW0HVhsG\nuBJaaSD32UxMMmBg4szKliAgn8Cq29b2nvfhNTZd/eailm0ZjvzOa4ZSGkmg\nL/wJqMlvB7tchC/5O7Bag/7wo1l4e8Ags5Do7htAIWM21gh8DwFpTkHnRd02\n0BU268PfiEl4srQXyhJtcMH7EWhaspXV4PsIZZv6e2Yrg7QjyRG/fREdbY2x\nvWFQ9I0Vs9nfuhg91EGWW1gveZ9gObJm6m1FhjrGym30RQXfps3kCiSk9sQa\nW1fBuyWHDW783aXu+k1AVssdKiLql+ts+L+yWoskRzplfEH6pg9wIlfnFPMy\np0UIoq9SAewkiTtzv0wWA7eVYy0G9d9NJ9L0HYB4fpqPLyB8ui+ptJJV8iHN\nbpKBHy8lfSEBWw2RE80qVAUjsiN0/x3zO/m3q5/IC7/0TLU2o3JXThhUvS2S\nP3nT\r\n=SRuo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgzjdUo5jISmYZu4eL4NDot5tOhe5RRZXv2ZLG2/CM7gIgWJrciKSMk7vuTPbO/QwO8Ffj5w4JYMPZ9PtaXleWdRA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.22_1572614390686_0.2917046149154261"},"_hasShrinkwrap":false},"0.10.2-alpha.23":{"name":"@react-ssr/core","version":"0.10.2-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"24586e161763f9a4c8f52a4578f7f93472f7bf6a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8voS2MHpOmOd25HIW63XDEnazxIl/njVcv2uVcl9/5HDSEjs7W+BgUv44NtEO3jvYzRMxQdgdJ+DncwjDvHxtg==","shasum":"74a749fbbfd1220ed30aa9fc946ff9222156423a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.23.tgz","fileCount":26,"unpackedSize":34642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDE7CRA9TVsSAnZWagAAmloP/0R+ENMYYQ/1DGgajPAK\nN3t9PzsgrM1L/5yioRjNUJB792Uq6KvPm/PtAuXWmj4kf6tnM4neebNjBEao\nGrDksZXBjWQ4GTvfBNJM96MPktcBT9uS7V78/rNvkSUo+W+amGzscyDcQQpc\nuulsMDLUhccEAq8mLlXMtUuavmj7OopYoiVMXG5+E/g+MxzUIhRTf+7iEfAI\nJEMzkb4Jfo87EuFpaDi29H3c5N1x7RIn/FiM4Up/w91aD+AgTNlIj7nsU1B6\n0QzwFKb6eTLxVSGaeLtZ7OBAh3IhBy+YaxXr8t13ayFlgCJbWISkq/csNl/P\nlULnY9Gn4G90i90qD4jN504ebTShPWb5V8AzAsccG3HG5I1VYlJjZ3VtT/Nc\n96Kb7YwjeRNWYH+yxaB8fSkjGQzZjnWL4KSYbHd2mnhim7CpuHTL2gzFyur+\ng2ehSS3mBboisBdf0LLapxrCg/7DNjeX404A+/s+hvwQARipaCDANxiiIWG0\n8rTDYvL53vlRgsWHJTg6GyBpN9vwEMKcW9XpCD7qPy/0kLUR937iKBucj06H\npy8UVqOi28rlrPh7yynGI5xRpKNqRuoH1PjbUvHKL918013VqgJHGb6LrmlA\nKn66JyRRHjetXy+JFhRaA4pEl9ag2ktmGgqPVxx4p+z2aCd7LyO40wSzZSXM\n5xl3\r\n=To7l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNtpvl/H+9TRUsbZVa3IWxntZtHWROI4fuEFg76fWyqQIhANvu7XBK3eRSkdhbJtBNASmwUTE99MAQK9UN7B8ACEED"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.23_1572614459385_0.6708521691916991"},"_hasShrinkwrap":false},"0.10.2-alpha.24":{"name":"@react-ssr/core","version":"0.10.2-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d99efbdf2f1b61745679a1d587677b0360ce543d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gawWewiOxq53QdawldLxJcokFvLBdSeVK7ZT/JMCxBMcU9dayh0tqiDMjjEh/cIMLxo5rIEj3R8TahxzfaiRJw==","shasum":"8d154bab922db38d711b8fa7a636573db20c176c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.24.tgz","fileCount":26,"unpackedSize":34325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDL3CRA9TVsSAnZWagAAuHgP/RsSzfAfumhG8hWWpSrr\njSiqob8goHQ2/hP+m/9Qwiuebf2mjUP5hFB8m25Kv4mLzQbrTJKMyDuWgJ29\nHHMFGScMX/F9Xiuww5rn0ZiSOdjqZHZ2teJ6IKQ9yVhUeU2Sx27PGwYmoL2Z\nj9eGVGu96uL3ykwin1ssWY/4W3r3vu+1Aqwpz5lYAip4En2H/4s6uxEuDb5z\nF9sabrZ9zWUTljIcdWTbp5OKkduoQcowd+C2qoYP4hUtG1FPtpN60xzkdK9Z\nG5l3y1kTkz6KLmZBxWtWsRzYcpGNVw9itP9co4yyVtSRCd9wUNH2tOAqDvAD\nc5ih4EZfwU0Bj6vSN8YBwnC0TMJR5ZtodcktY6iJ42nl3VNPgvFwHPvdNDgb\nSxpMGckRSu0H7kvfKGPSJfjjQsYL8ilT3H/qK5z1hTbkYycyaUYNMhUiepTC\na+Wr/CEYthBp2vzrW3v7AE6sFf9QMU0q2CIPdkV6J/jcB98Xwj0VwXYe2eAh\nHgxsI7i9LqFi8II97IAwVEiqygUMMaLRkI3QIq5hcXd8GeJD165R5fq3Ani3\nsl3TDeyJQLJfmTtHIXXTJ4bve7058iPcMRJoA8h68KeiX/uOQDlJ0E84ONJ0\nXDNgjiGh/A8V3fryTizkhIlLb9CRP9W9RjZFj3g6k9NJe/MUWZUtHc/wlM9m\nLWls\r\n=mEt/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDu4p+CxFbsRv/DbwcNdksLUYT3Nbw6bgBsgMKl+Y1UXgIgbo7dEQE6NsNfWUCTRBZ5b3w59p8vVVzSE0yso/VUcKU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.24_1572614903105_0.8457476143541285"},"_hasShrinkwrap":false},"0.10.2-alpha.25":{"name":"@react-ssr/core","version":"0.10.2-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e1488098fd1e28937ab0d7ba0bd2167f7fe89d29","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-G72RK2B5uMGG4juFaFLOD7GcthbGeHRaVdiK2U9ZHuUGaj+6RGqRyU5gCjTvSL7Im6fLcwO5d9JFkX4NsSFaxA==","shasum":"9c52bf56f693b49351d95ae54a78d65046ed7b2b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.25.tgz","fileCount":26,"unpackedSize":34542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDUkCRA9TVsSAnZWagAAlhUP/3BjtkmBva4iemuCuA0M\n574cTW6UN+2xJ6suqoAgCv0LXiehio6M4e2+wlJl/1I2t+/lIc6S3KtQ0YiP\nZRpPynFesE8JNdlNyBkbRJakD6aN7eDVGyf+L4J7vwUQfZBD+o58VsazOHdR\nTjBx//ale2H/pqYQSGzmZKyQjmj98BBJo1Q6fqhj0GBDazKDbIGa5MwjWykQ\n25o3Z1n+J6L6rIuK/6nCOvfsPeY2BB0n8jkwOdIjXrC8WOCsG/VvE6WJSuGA\nYLQ/dVSuETEWJ2+1761pJgCuWFyNuGEAfl/jMBRuW3PSWeJlqPJfmMMKx2WL\nbP8bJ20oVtLJa3EttClk+lPjYyrV02R0huC1AmSRLVjVsrWYKCmmkoP3NvVX\n6QaygYA/Tss5MHcSFrFTMrqBGB1ccOJwl/sk6XWDgXO+gvniNX54NDpFifxv\nuWIxgH07BP9gll8btKeFgb9902PBsjUF7Daqn1dzqBCXgHDgL1/PYbJYtcpJ\n8AlzPBYGpeyY5VVLtc/nAo0dPmrPePFCX1K1A2AHEyrfoDeyIgUhrz+pw0Rg\ntaZYXC1K/I/+utRoYOxscmkYskkR+ItePJaT6s1VU0AQLJu0yVCeVm1ipMBc\nfVXPMKN/L9ZFDpTCsMN8571gWt819DYuE/gDr9KmFmPdvLr0cpb081nORCoE\n5EfN\r\n=qdkx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZVt26am/Uea8+kTNihvgXYBMC4v1uN+PnAOi9ixiXCAIgRQQL4u6om99c/k+QJO9JnuXANFnVmyFWMIHXBHoc+8o="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.25_1572615460099_0.3863580457840796"},"_hasShrinkwrap":false},"0.10.2-alpha.26":{"name":"@react-ssr/core","version":"0.10.2-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a8bafd4fd39f0306001545e080d83a4a0f1741a5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pLcxBls0HLKfEG0dA2SMe6RI0BGXF2RJCgCqPBXFnMTjX7IT1qeImr4gQn9HmajpUKcbO9GkNXFhpR+pe0T6LA==","shasum":"9ea37732ace189ec7aaa581dcc9c5f19180824f0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.26.tgz","fileCount":26,"unpackedSize":34493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDW5CRA9TVsSAnZWagAAaNgP/ixqZ0bIoQDUZ6AtRstk\n3M05wkZqv8+mU2yPsrd4owLAW3otUVFEM2BTecucSu/Gl7OlyLFC0m4esLBZ\nlHnDBSYHQT3f0Dvgj+dM+S+SqLdnkcDBCSqQAyO5xcjRlWDlR38q1ig75TKw\nuISPWiV7QUguXkk/87PszmTL3x2YDxIFr6iAFxfEjkJr441XaeClX1Lg3Yi4\n6OGoga7n+GsGLQyrvbNF2astjFknlSdhNZAj1jMK6qSsGzdfLnxMxMy3aO81\nyHkkH9kI/j9CQcQgbAUtxXAlbH93viXK+f4XyGOdABu0jYh48MgXxhlgBIPl\n4E55gkg3izLTxDN56k+3wxAMI46zrKkzXD16+X6YOdiAMjw29tTTzKAKtNt9\nUsCrc3up71fdpjx/tEWvyKiTcEQAedYYS6NLl4De9KZSgUhsgIeQktOGQjsT\nOXJmgBGJg4euG/hn82qhFgnXSAZ6M8PnyIQ2GXeP2mR4S0ll5CbhhKRtVOtw\nU8D/b4JYa1SMg2TRWGDqVovT2ru9W0hd82ScWQEv3fwblUtefp4oj0+mgNnD\nONaq6CnhcB45jJ76DKJyo1iBh/1+4LUDMGNZ8QdQvvqd25Gwlrjv903sfQXx\nSBZcjKbWFUIpVNGGHUpqRHJKxyOPuH1x/hiYpY+zUVKYsdc8E6qiBxoGLgCq\nqhV4\r\n=Vcog\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj6rGCrhNVFAsPUwR4LGHlriUzO/tAvBfNzd9DZVAufwIgFhojpwpP4X8TnQUOjc625gmOoQ83UkpTw4mYrrmSlk0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.26_1572615608666_0.6108185426935921"},"_hasShrinkwrap":false},"0.10.2-alpha.27":{"name":"@react-ssr/core","version":"0.10.2-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d10a13c7c946fe29dd0e0df182905fc667f998b6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-GzB1BQ3bDbSFNnClOjCVRUfdYZngXoaoEa4SLmQj+FqUq9KqG9bBVxz2Ow5K6EZtgYWytK5sLISlBSDgqqUKbA==","shasum":"6b561ec6e52142b608feca80771d753750c7954d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.27.tgz","fileCount":26,"unpackedSize":34406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDfnCRA9TVsSAnZWagAAsJkQAIVvJL9d2fdJ4NoqBJgd\n6iCptm+10z2eufPsHyFnL9HQQujKHrMAmtJNqzSZ7mbH6OX/E62oiiG8f/p/\nMammFnQNHDeBugeDjZXkktUdadRZgAHKvcUk0oTyENbXK14CFb7f6qQz7+cd\nG40hDrVy87BnbpGT75573X9wte9BJTNju0sdT1Pt06eYtLQo2ZadgCIPUZC2\nhl1vQtbnaSsKpVM/ZhOVV16i+W38tKqOrpfwD00oQOoHWg5dlykuw40Yot6H\nMoWoKmkTc8iatEshyvJClQXNFGQU6/06MHjLAVS2WuwoGLxchNibB2PDn9JT\n720XAzzcI4mRvjRl9FwUf94y1MtJaGp/JqrQZKJwtNUW1se2M/KN8ECkJwZn\nzkNcPjz39swRd8IPxxRoxWULlLJiyGLgzdqHbnx1V5IaQYtY6SZKxkpzfYNx\nl+Yp0jLUYJrkaWqjILqr30gkYxI7DzukF/Gay3wR5NCARS3KzC63AGzOBxDX\nyNc+8ubTBxyPsonlEbKtg0BR2lX0ewI3Op6+S3iEbUbJClUwiP5QELew9fLc\nChDR2zFYPjsrh48vEsZDAQj8Qf0OMgmUaF8pd238utpUCVsqia3/ddsjdaMD\n/2Zr6LrFd3GaPZ3m4lfMLBxfeeEnhC3rDInyKB+OSuUA7QaC1+LZnKwQRkJF\ndhaO\r\n=Ov0O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDTn1uGz2GXYmjRq6QQjPp+I7LjcLIQItMrOMuhctKtAiEAljNiSof824rYcABkl3/6Kpg2H/5vWMPyEYjW+GGEgfg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.27_1572616167171_0.021799102578333285"},"_hasShrinkwrap":false},"0.10.2-alpha.28":{"name":"@react-ssr/core","version":"0.10.2-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f3203406179c8cd88510b9bee49f8bc7f8c515e3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8o+VdZ/ensYwnXYlmJYGrnYHUoaAI+vuN8gdxZslomNt6iGugYZbiH++LYNxMQPVM9A77XNDTOSmUIH3WE+6bw==","shasum":"66a2136373668091fccd5d4366fa063057e8b636","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.28.tgz","fileCount":26,"unpackedSize":34496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDiCCRA9TVsSAnZWagAAWOAP/RO8/+o9+Xuwj9syQEvs\n7NsuPxgGo/no2hsnbRNDDvw5OSENPd2LPAn3iApiylZAXHcdQciEMRu4Lusf\nSG94cBilAq29sqxO56b4Y2vRG3/SXJRS1ARYiX6sAMyI3PosuMB3XYWF3Owa\n1pia6LpfFJIq2HLDqTbd3QYzFYQMYVjmGeOtHnXnrHCXMqpEeTN5QvhQkaYm\nsoIgZLDZf60w3vLqQGrxKo56YV/SMAIn0qLP8Go85D6TE4tTjzE2WMmwOCvo\nykk4nZXIWYWytugW7pf9JnY+DvlhpchwyFJ+6jCOX5y7t5WF/v3pViXD7wsO\n4nrOiP4wS4bBfctkuK5CzfPBZRnYsR8KwwGZ2BU2b/CPAa4Vj8yrJ+YIiFlI\n9DhW0+uZlm/temkpO4bbmThP70bZoOTkhN0Pv6pD0V1JEXyqa316CAaFIpOQ\n9pyA4QNHXFt+7g/eKG91ufddI3BcZpqiuGNX/n0qHaDGG9XPK1E5J+85OIz9\nm4R6OINLoOcwkpt2FQBu+XX7Fcut6ORp0i3KCVqpccNNbepwiow55bGDoVW0\nv13+bcpGFzskBWlI9Tm01laZAiG/8zqX6x5mFdA7gjtzzvc9TU0vufPeVTXM\n80vQCHyIbC7bR2RDA0bGTTMwsAr5UjY0LlXjQOejaxR0M3X2oIckM+uCzpwe\nCr/x\r\n=EfbK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpFkwbSXAVCqi99U1AiaAsgqtqFsZCEjZNQ48LmGKUsAiBJYHH6LPwe0a/gAfpF/BSW//cnEMtkjjOo62aPFdnO8A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.28_1572616322157_0.18201295840817178"},"_hasShrinkwrap":false},"0.10.2-alpha.29":{"name":"@react-ssr/core","version":"0.10.2-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"da1fc4d7226d5a2a7ad8ecbbdd0d6447b7fe75e8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RwDQ6QPUoKZ80CIiLw3J0WF/EwTszpAzhwlOcS10W2ugAR0TbugtC4V8gykpe/yWUY051d7zdqoVJHnvsm5R5g==","shasum":"cfca08a9ed63a834593027dc6a6ff74c51ad5246","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.29.tgz","fileCount":26,"unpackedSize":34499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDjgCRA9TVsSAnZWagAATL4P/jFwy/0sDRL1t8ksW6fn\nFUDkXZgPeIvV+ILNu0r0g30LwadNYjG7Vy4rGKG9JhSaCJhAYX2mZXymv1PV\n5KNM4bygC2rnSN0SayWvT/Y6V7aOPD6dILdfQh35b5xFsRQNv+U5XYRsYpgT\nCgsT3Rj53jUm9Ad0hnMprMQmEK/SeswO3yaSYOt0hWBhbOrg8Ms8Lv6X+gwP\n+A90eIW8mjrgm/90QPeY3QIHMRODY1S/lDu/oRzNCuO9Nkzwg1RjRl1c73rt\nirwpPZNPjzKtxfo/T26yy+bUAfotGK/I1eUQ074xOzxZAazDy7Hss1xuJtMv\nDJY50WgBA48tUYS70XyO0WzKEEXNokJP8aHUSsUs702TUminDwnLgYctDlVX\nlVYqSyfxCa5bdk8RWUDg0jYJ35LKT37kF7WvnK1mCJirooYN1XgHOENEDNwT\nPEN6ZLWgvcWtXMZOX9gqwny9uZzD9AvQ0JgLkV6h882qQzyBwmSwuyJ0k4ng\nxzlSQdZASK+Feei68G+kocfrxi8kf/m7maZ/8HXlCYiEtgE97T89fQExzCnX\neS2GmXOJOo3mlA9EUrt6+2FBPODlFS9DOLUMcQzCbPiT/lIcJs0bbB13+NqZ\nNyAHu9o2vNh+1oPu5S2j7iESuAtgn6GbEoqWrnUR3fr35xK1Eg/ew7r/shlZ\nFghL\r\n=g7Ul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeLsebew132NeKxXGdsqdEEn16liJllRTbkEhhosGGbgIhAMYKzcwQJc1PNQ2s90HvbKkfLgieaqzZ/h214X3PQSyR"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.29_1572616415921_0.7333701746252339"},"_hasShrinkwrap":false},"0.10.2-alpha.30":{"name":"@react-ssr/core","version":"0.10.2-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7b538bb6b8123542b4f0e475ea10dbaef74ae0b6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Agk2rvURPzim3pWxlXxnt0f5/lIlTyV2KuAkL08WCAhUFZIBVe/sNozcGjhNVuLlA/2w7Me5qChWx7+3RoN5gA==","shasum":"342ed9f4bdbb6b591a7fe57f2b140241f2c047ad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.30.tgz","fileCount":26,"unpackedSize":34501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDmYCRA9TVsSAnZWagAAUisQAKFBo/2Ii0dcSvkQZvIn\npZHtfWiPBklNGA2yZT+tQx5rLsMvB4cROORo7tODbGCnnLd64odK18IpDn6B\n4RiI7QeApqayc50boUoOV+3mwiTcdAg1zNdmG4vFzvVPppND/IGcIFhiEdER\nodgEsRxfvZHU9XLrPUuD7pZHM2739d9EEQhT8c6nnilSmaj2nBdURR66H5uA\nU+Xocb2CVIA4B3LvDd6Emi+UZhDmQZ1tu2Yn3KHWI1YZWzh6bxCu38ZjR59a\nsN7NmQSwIe4wNG1BKdJa53QQWupl5lPg38wqJXhsoX7Lz6v89124clZsJ/mX\nhP9hxOp8+f2HvwiCLsawDFvG7JcDhgVjgQeJJf1+JTfbKdtizRRY+AGn6J2F\nPRh9nz+2ZIZnuslJKYKvZ+I20HfrNdl412oFDkRCFzNJ4ZQ3feCJdLbBRtLZ\nTbLBlurNglPmuopvZ6fe4BxBhCZhWD7Fa4QOuD3zrNjhzZyx13VEdsQWPw4S\nT3Zl1ki45grGGTGP9COqHnwiy4VTp4o7ujq4AdtahrMEl6hUi70jFbshzAeC\nYpqeEPQUOkCAx/x+Yh+fAfL7elTz82hGc3vH1NMxu3PFs35UHZL/6cBUfewh\npEbTouIsLAoctT2kHOT9YPozhRQk2f3U/PLAqE61I/uqVUzDQ9k4fykKozGH\niPT2\r\n=hz00\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvo30kwAjwQFG/Ruf4dHtxroMrZgGa964o85k6/H4S7gIhAMmmbeLBKMJJoi1JUMzxqf0g+RPzZFEPZ7Yfd9nwkIqY"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.30_1572616600160_0.867479634986182"},"_hasShrinkwrap":false},"0.10.2-alpha.31":{"name":"@react-ssr/core","version":"0.10.2-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b5c06cdf51fe7086935cf58816852e61347c3678","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-cUsVVZyaYzIci53d+sf2S513Td1uy+h24wHaOIBeoj5+u8BYvawnd+sZSLD+gF2M7t5RGSb5LXSwU3L8hTmZRQ==","shasum":"2f9571a40f75f1bb20f139922963e632e3c83ac7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.31.tgz","fileCount":26,"unpackedSize":34501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDowCRA9TVsSAnZWagAAagkP/0ki5WDBrEPsB/nzUD8j\nOq1wwUKnqUy+RMxb9noN5xLOSEZLpKKu1FAThL08qB7FU/JYtUOTFi+HAkm5\ngRq26LZOMoyj15+L/OEnWXod2RNFKHV2Sf92IKDasOM8FQHo5Rtc6kBf0n13\n/QU/12XPn2PJS+sX50Tq0Ubl6E8StuCI1S8pMlQNJQA/dyet/R9kwWre9mzh\nkuAZIKdTmd4ghdISA53y0OdGQwFfPo9AAAG8OV7WGW4RI2zPnxuRbJO+NLBn\nqq3nJiAVIG5M4RDmYIDpyCPMC2InxJLcArQCkWTR4jyaykuK+5nVX33SR763\n9q2xiq/f5V9A4ieK5OfQxiQbjrbSKo9W+jZZ28wMmoVCDi9S+6a9aixM7Axl\n20RXVdVnqQ2udArOQKN9S8yCxjhzTeiMv1eaEF/SO3wTCynSmkZuFe0JXIyz\nhgeCOKInz9vyIyAPHD16jm7ehkQu/EN7xFe2xpIAelMwXJSYz42Csj08ny6/\ng5VD58Qvhj0EJ5sEQMHDZ9JDdfovdNk7rYpQigYrxQouR/g5wl+jITFxqmUG\nmlXjLo9+yNcaz9rLPFv0YgFouU0Vnaj+XCdqZcj8rUUHHJvypwPwSy6j4x7n\n/zsrFTxkjt4JOmxuAxd6riQLzfQWJs6tk/rH6x6iGKxO1DJ6YI56bYo8reep\n3Z4G\r\n=Yr1u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJ/0nc0+/e6Lr7tt3Lp8RCugx6IVr06hIHi095UySJmAiBEmbgk70PoAAswlWiUSCLavd7jhzdy+AWWWEvJnLUqQw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.31_1572616751945_0.0010963810556334774"},"_hasShrinkwrap":false},"0.10.2-alpha.32":{"name":"@react-ssr/core","version":"0.10.2-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bc77acfdd72623e1ea1cd7408956906789afbb20","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sYc+7S2CncWlr0RaQA2GkXpPlADCOKR5F19zuEYmlnMmG9MN2ksvtmdcvq5l4ePy0y6ttKgwEziEQSGLeH8wRg==","shasum":"48533eb0aa0856103b5bd512b48cb35d808ebe8c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.32.tgz","fileCount":26,"unpackedSize":34524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDqsCRA9TVsSAnZWagAAj0AP/0e8yui0HvXNI1CR0YnM\n6YdD04eaaSBPOzP6uLO9lx9Xb20x+Kxay+947IMxUZ/HX8DVe/l+/eWZcMMZ\ntPSNYXgHQgGfxzYUdIdKRq6Nf4g0Gmd/hf9Hl1IRNc9C60e7Q5u+C9atGxpd\nB8WS4Kp32RZwO+9wsC8w78WA72klsHRUsxjdDMrarA7uZLdcpCBravWrQkqm\nIXzZj7qCnxmXIy13pG05gVTMt/zSiJqA0S3qFVdR1X0XP4bGmAJxq3wRu5Jn\nc1TilfrREG249XEeP2PLlq+7hd1bZzSce6VlteYsQNiwoP2G2nqfOHoETQJU\noa+tKqQcn98y4SnDrhFikG36bYgyj79gIkHs3twPtk2x69Vgl2XIM9UReqo3\nR5JboWtS4FPOQMuT8pzBsqm44KuZvBJBOOhLA7c+xd9AL2lc80IBtaIAuv6/\n5z+u05aHUJP6GYZxnzS3eJFVUvqyYQzZkHML1lMzN04Q+neyt1VyqUD9HwPl\nfquXQmGoz5D9w1I8R9H5qTpOASsUDvpkMa11maWV/zZaTZjNO73hSI+uXSTR\nCMgoQWM2uXe4VB61WziEF2yxuPBJaKkWPwfRPMmcjP4sY8P2BZxSFwF5zq6k\n7ODWXHGtAwV7j8ACz1eyG6rzWzYuCfs45mZGGRY3fBVLgmMoZovJhdfkK1H5\n6gxZ\r\n=tykF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGzVJ2CxIuZ3crnZB7iLp7iEBqYsUc1COOAY2NfSR+b+AiEA6kiRYrqwMvwJQ+G50V2nJ//WzRFyJiFfG6UDxngCSXc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.32_1572616875837_0.8419562160835166"},"_hasShrinkwrap":false},"0.10.2-alpha.33":{"name":"@react-ssr/core","version":"0.10.2-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"12bf2e05d826a676d9c31cc0eed08be5bbb40458","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-OSKBYCrS1aoVpFMjOGHVt2nSdkoNpjsh+6ANFVPFuiZCA7X9ZW+jKUxREoU4nqaZXoi+H77S1YWu0Jwjpq7Snw==","shasum":"9b8d764ae06e7f7d519c35447e510cda15e57462","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.33.tgz","fileCount":26,"unpackedSize":34550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvDs5CRA9TVsSAnZWagAAa9UQAJNCQC4V0MaAHtgw55oB\nmmOWtlQz7oYaP9TzLtrPRVCzRdPtmGcTvAthsmt1kxBU21NA5OB97MXKwNLo\nECwzEQ3JX9ZYMJ/NohhVrNM6F2XfhnoJeKVvCeC+8p8y6Khvg86PJxZusSMc\nzZFouvOamYVcQbIMmsYRFeno0AaBbrUHyumEHYJyHPSMc/96Z8L2ZUHZVyUM\n66V4JuxcIa8MQHypsh/+/BYkkR2SieZv35EtqRxGCLyZdrIa4U7lVmhsClKO\nAEA2sDSIswU7Mz2bEn22CdtqqtCKR0qu+RVrSo6MEkUwe4yB58XtQ4l50mkd\nuSLCgogaXbdCD7Pp0wkIzXSx+vsrzaf0IrQbYgTyITI8oxZSUjeHUWq1hARm\ntnwoboqp5KCnCk6o9zP4hQEv9SUG1b5cxoflb0/o6Xy45H9PMqRn5iXVbvtD\nYhiqCZ1WX9m5W0GYijVH8Go99jBVsHOvkI9NV2cGcH/Uguj9btL9IwibJIFl\n8eMdXlK1VJpckj1YEt3CPeQtOmS9hNIMLNP4fF7i1d0A2KUMgjgrJkW1jBOT\n29TzgAzosGKvXA0zvtU762dX6k+EfTEXp8wzkG666M9FEvPMSw6nPQ3Kaly1\nv6RHNQxVXkjH2+tnDIKdNCMYQCEHtPyrmovXd8epFHvxlj+CwMgAPdZuo13P\n2S6H\r\n=GWiY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiZEvDKnAvh4QWXI1sx4oqud+KdBbFoDFLLE5TMoY99AiAh4+i3/288cLSmQ2tZIzuxjUvoJ4CY9uYp27uDD+iM0A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.33_1572617017147_0.962643171151154"},"_hasShrinkwrap":false},"0.10.2-alpha.34":{"name":"@react-ssr/core","version":"0.10.2-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2b40f5d42820a877d0f68975231fe249be66e2bd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FDhvabdJ+tPGvlNOgtQgKkrASiZWDbh10H63emouAN5gCodOoy3vBwb3igi7xW9yr7weVjGUNFfFN4gbRgHvbA==","shasum":"e90c69a1d68e6d1483098b4c866d6a1765b91596","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.34.tgz","fileCount":26,"unpackedSize":34400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvD1hCRA9TVsSAnZWagAAtGIP/3WoUCbaHpra49o8VhBB\nJDsplFOYSXjNC9Mo9085ddu7Q9ZDCu55jiugHZl5fJdeYQG70GCisRMzKuwy\nzWOxrlkeEY+w41wiQx4SZnb26Z3N0q63amIHa5//21yKhVQw5x8JJeh7KvZo\nOHJ0Hh3cSG7cqLJAhKUMOWaeJddF3yEXaukQwzlVw6AvbZTRHGAvp2tCmjgE\nUiIekc0wAwfZl2LU20vzR7YhVn/YxxTHz2ICn4SijZfsilfSqG0Tzf6gYsYN\nVQAzkjJRXHmYGzuB27FaJcxV/mauoJ4ZnSqYOcME2wFylP6kLLkz8BXLshOv\n52bXC0tG4CuBfrqOf0o7LmeUb788QjNCiJEONrWm2w1mrsQ2/5epFQkF37y1\nXMIsqJ7YlM+TdnBCGigl7fqgOZzju6RV4o5Wrx/tmcB/wqCX/zzqrfOD9Bd+\n9OxNFTquat299CExTnz8Q7gGNBNDymr3KohKITpLulEKuAxiyZomNrsVLN3m\nRyyfcWfcmPciEL4T5tduCaDoLa5M4Ezt0ibt12B4NMUHrRym/w1VmJ2BtH0Y\n/Aq49IUDBlwGc6y2SCTt9KdW0KPUk224MTSd+TLbqfJW4ahzA854b35X/4DE\nFfkFMoZH4IapCYm44J1hFsvnRUPEY6MVw+aSr0hg1AYBYDFJ+3iv1Zy42HzM\nK4Vc\r\n=WEYZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDluLHcJk9cwDhZQCJ9+0WhyGlr4HpjkeWZ6gTrrLPUgwIgHDcq+GXsJ66fbE25PJS2Kkldgzi45r3qRJSym283844="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.34_1572617568561_0.9890944166370244"},"_hasShrinkwrap":false},"0.10.2-alpha.35":{"name":"@react-ssr/core","version":"0.10.2-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ef5ffa2f2f20eacb6e5d456c9a6f9ec62dd3319a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Sxnh5tubDX/tY683/14ZkqEGnj3a9AeYiUv1FpKIRtbj99BOJq4S3+bnwKmQG+89cpA2X+CTb1jlgNjLQNB39A==","shasum":"f3dc2558efeac4acf3a07c5386b5818268467845","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.35.tgz","fileCount":26,"unpackedSize":34301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvD24CRA9TVsSAnZWagAAa5wP/36TX4+fdp14r99XxykX\nlMeoxg/nyi07rYd1zFX7AEoDrNocbnUn80ZPHx8nNJqnZS3QnAAX0lVbuNwj\nyEMvo00JwWZE1zLnZX8iHvgE4MInXEgapz5VNfJHWeSNlHlVHnaz1vbYlq7i\nzPIvkpZArzQEjGr+Lfey3Euvs/tQe34Ff9RgP3NdFTr0wLkV3h9ZRu2cEhM2\nIbPA4O4cKeg3yuKEhGCYZq32THGKwkWY6JF2rWUxqPpsr2kqqNsmwE4a0j3o\nkGbKmQLZ8EvQnLptCxM/1OolxcRvE/eCU9VCnWE3uK34p3VPF8vAO6IkVKzj\neAqMkmlUUCqVZjq1GvbiXW2LauHiZsFY//nUvNx859SUWu5fGtWHog07WHTn\nqHvvkzwAHdJCeVqnH05VwxaKqOBAHgcpKMWGvtRWLwT5SscYwT1I06r/GxBD\nmXdYIgRlLTrVRENY5oGfgnjpmV8E8icnl7/uKh3+bJVZigpIdh0toBDM/h5s\ny5EZt/ZnCleaQ7PMOAjvx70wItQ4hup1SXjFiyL3g4LrncbFSHn5EXyMvFSt\nNvVQ1n3+9bcRRMo91U1gQCC03VjmtPOMPFpg0+ygBrxet/ry52SK74f5RSdN\nyeQjz0fymZjsokKK+3+4Mfs5jHxAU9aoOySgxQ5bO2VQPfjkkrLwi8a0U8B8\nvgJ3\r\n=eTk+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH5B0b3AOv2HAGXlrmZBkFcVlCqfjh7QMMNcjZITXKGGAiB079ZjQh8M72C0D9lt24sXdr98JkTa+2ECWfkQozUqmQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.35_1572617655588_0.29382391726936885"},"_hasShrinkwrap":false},"0.10.2-alpha.36":{"name":"@react-ssr/core","version":"0.10.2-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"df6bbc0938bf9cd1da4190580a2a1eab436720a0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DQ+IkEeFkIH5WA1uK7frB7HBkuBNVHyprNp6Q0audrh0RhzCLVkUFPPkJ4U4bhFPN6ua/Nied5TQ8tuqkF7d9Q==","shasum":"c0b3f7f60c0a312dfaa8d138867673b0502d437b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.36.tgz","fileCount":26,"unpackedSize":34373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvD4yCRA9TVsSAnZWagAA2ZgP/0dcUU7KOx10BA2SzvSd\n43qtA79DeTETMQ6+Rk+R2pF78XsGtrtVja5CMathfYhSvv157Pl8q8HtUafD\n/Li/1ayPiThjosAny4UWPqQoIJR3S/KcMqOSlkRP5vp39j2ZgEFBtcZR9PXx\nitxRNG1Zk8qGSy432Nbvysd2AaiurlPtVb2BYsznW1Xx2kjoovIIxCUOclM9\nuTL+2EQqfB5iFsK6JK6MY+mXJ+DswYS9HixP+sTNR07oXeolM89mCD8Te2xK\nkCfOoFkQgu5aON6RUDDjtwqZnH+g52dJK/4gzlry00WYZn/pCrduPgF0+SIN\nYnuQOIDAEDg+K2VSm8ECwr4aWlaLDCpsIi7JdDzozGarpEduOB2sQJVRzqt6\nRK0GAZMvb5Pb//pQrHIkQwLt6MhRESR/jBuO4f+rOMHJEEZU7i0IOREU4aCd\nhyNG51edbUyofoBbk1bG44GqpAQlwrunjf0DA85F5SxfWezarDfra6l4rS6N\n45AMHFQC0ZpXHmbGexQGTmhiFpR+Txl77hdfK8b6rvzQhha3voZ4oTuslR2g\naeNjI2/BGtBOxqiIQdck0l//0F5kxV0Ped1w6Pf749Qzt4q0E7gIW4vjrlLz\n2quYASbpNUJPLg7oPpsvWZL1ctvHuhAQfTsLcc6tX1VnkUbiP3wsTeCUf/Em\n4H/y\r\n=06vm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBT5rQc+l2tjy1AfaJsKlB5H+ph+ddvhqhHa7CiRxiNtAiBIG16qNg8TOaDlg4zKXPrRBXpdYgqwGZ9h7PGG6Nsd6g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.36_1572617778002_0.7493423559940198"},"_hasShrinkwrap":false},"0.10.2-alpha.37":{"name":"@react-ssr/core","version":"0.10.2-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b27988821d14acae12522457b74c1d563988e368","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-F/y6LcjBw7JUB0TW6PHkwGlkoUdRE0HTZXeyqMNX3AGroB9I9511FROIiBvyKuVUgdTeVdJ28O/98sxu8OdrTA==","shasum":"abd06489f5986e59743779f3ca31bfbc35306027","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.37.tgz","fileCount":26,"unpackedSize":34448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvD7cCRA9TVsSAnZWagAAjVUQAJT30n/gPduqCRUW9i2f\nHpDJea5zMPm9qwk3LrngxjCPdjbh/16axRuFM+IP2Y/3gxikfCzH7UjZFen8\nqA098Jui8yOT/1rrS2SO51mRh8tDkgwMz7CW4TpPq8kFL5sYH5ymA58PlH21\n73lYOV8wdemBLMnzNeQ9zvD0VfYZLx9K4E9lF3EJu2Akf4edyK5CNxjHnQxO\nj8BjNaSlMkjbETZRyQ4cV3O7uZx5Q8JIZXXsD4PDe3NUOpwlas7QdulEJDJa\nd3jwgOBnpuX0sfMnOzXYUl8Cfn7MP9U7v5OcoX2v/y/0L5wmN/C8tJcIamBV\nw4E+olLfeGOWDMH0SeNbXhWdXOurePBGAWuMN71Yuk3ntLM1gEKxCdGbWe/w\nHTzlJtjqzWso78p0K97PJzL3nfwt7VvNQSGtNdgmLGmigTdoKsroBfNcMfE8\nZ3qGvhbd/V2vzX+LoD2rNHACarjo8k5JDs9xHjECRFfE2zuAg20LF8unGfk3\n6NhHH1bh8ZZnO7uUWaD4/pQfrWOLuNb1g84VuT9YaBJUWEibOjiEErt8YnQs\niVrO77iAJ2Y171B5ruhNSXlhSnOW8/b7ExsUJ2HDExVmNSoBl3JujZOoFLxT\nL/o66HrGi3B8xWoPYDigl76af0V3IICZuUrGGtQ39OO9i0NuEy4k7rF2LgOO\nbAVk\r\n=AriF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpbTF2ZWZWOkfijzKqbFoZpwuYY5+HFlF29Wg8vbNg+AIhAJ1mX/0fuvDRizmne82lEXIgFHuMfovP6NSG67laTHGP"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.37_1572617948136_0.24215720555406506"},"_hasShrinkwrap":false},"0.10.2-alpha.38":{"name":"@react-ssr/core","version":"0.10.2-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5b78d2ab953a797a2a451edf78de9502a89e9e09","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.2-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-h2iGKwkpRRWmF721+t3K+p2PA+25toS0uTFgFdLQPnw80lJ8ePjVNeQaM0UdfnFbnUjotlnN0u1oLzYo3i5fRg==","shasum":"bf74d9a94d4538c889782c28ee0421b1e8664e1e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2-alpha.38.tgz","fileCount":25,"unpackedSize":32843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvD/UCRA9TVsSAnZWagAAY5AP/j8WnDw1UJdGift0C5zs\n8ohPqzdNkMFVYPwIzk6buKuzr+iufnB+L1F496+Eg6lQ+VKoDj1SyFmJLF46\nkTCJPn0AAUTPy9pelq+9Fftb5jWxA7Tba3mxE5lVTxN29r/U/bWgDf/ZiTIa\nX0mAjJq/CKSldmI/f0snE8Y5OxSMSUJZo6OqlMYkNbaXpvgbU0mXRR/AXEVo\n5Px18eAJWpaDC9ytO263pv/wH0lDXWEOoiO99FlbJwNwXEsJIflp69elmKcQ\noBOLRp9w/OlgsqmKO9otI3SSwm9rrjJCSvOtLQVu8zVaawPLBmeQdM1A3YZE\nj+l1+zRozelIYl47as0ft9lRbd+ZhxU6bdsUEh+3qr+Qtqx8Uo+6ej2NGTvt\ncBrTMYWAPn3hKgQOzFJ/PUm/GGptGBNU3L34whWP1v0TuYH9pHyDlYuvz1Ln\n5QELoWD7yNC6PMuM7aMMqlm5KXqNNiBQnyEM7ZP/vwUA653Le74dsII7leym\nde+K2oKtWUGQneD4DCjHLtDzOIVID1yZHcLjMRTQBDvCeAb+xQ85oDY5w89E\n1HB7OZd0xi4ADUWZt3RCdldzHXqKGM6g93lNvUyPeyagdI84sAH2MgBMb0Mk\nCNt3KbW3Ocr8ijw8SxZVVYB5NlBU11l+W++ndhlvA3LcUOT+66prAtQKjnLx\n2sk8\r\n=DG9T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6npK2g19CNiKYxHFcz0Zy8FzVcz9B0+kynWxK4eT4+AiEAkwRJPwJ59GJVKuSmWFg7U2YGCX29lTqUEMWFXxK1xTA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2-alpha.38_1572618196093_0.5387694756535544"},"_hasShrinkwrap":false},"0.10.2":{"name":"@react-ssr/core","version":"0.10.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3ef018ad00ad9d166c94682ba554990d6527a344","_id":"@react-ssr/core@0.10.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.1/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mJbsfQvkGl5oEuiAAoP79tXjnGZ2BDorZyawhOsbrV3t0gEYz8fbHNbv6zbnmttM0RrsZH36T6GHOkXXzCR3qQ==","shasum":"a86a26b43b8b7c710efd49608218333b82db3718","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.2.tgz","fileCount":25,"unpackedSize":32826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvEDNCRA9TVsSAnZWagAAIAsP/iLgcCY9VI1qEZe4GAdw\n94KZ+YXtbI8f0WeKVr9mSRDlxb2TajQeOGRJsEl/mqprrs/8yh1T09/29AQf\n2Tc37wuYnpRMi3xQRd9Un02RvykvnFewZNRTLzpN4jqMjM13Xy93Xut2yS7k\nvx+mrGDpRNfL6F7TFul/9vH53wueqKfHSFUvf7UoCh2IytStknRGjYJfPtPu\n0ZN/YYxB37ZnTjrLG27Pn0wUSHtxXoav2VA/znxJ6hBD04fHNRniNSyTm3jX\n2ETeZXwrv+IcUj6PGMJGmsU+1dgRmg7fDmx6tvcha7c/DGdgFgu2M7gOx+ja\n53K6MVyb8eBWw3sQmRi2avHNfSNd2N5k9PBh+HD2IQp5fzXURH/4MEEwDd9S\nTQIFxKYmVigXpRLdDR5PfstMI4GXnMGUZDBvJioWR53Ds7PhqXJIFUi0easO\nvI8IRGWoavEbwFEcA6XeYQRQnwsZFfrp+58x8SAzCVIf+w4YO5RIg83Obc1m\nVyOPKec/jC1sOA6Y5zaTXzuBO5iOspWYChvozSM4U/n1NMPXxEp73U/7Rmxt\neIlIb50aZ2o3Ok1ambD46j+yri6tDy3S05pQDQMGvjOsPpW0vxkkZHywdkEv\nKvJYlC9SHzJwZ+GJItD02/F/BiOY+4eDU1lfnKlktep3KVIh2BbD1plHK9jd\nUsXC\r\n=qTjX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsv+Ei6yWdDfWHRzZAKt4FmZpoNShkHb1C5LhVSTYPEAIgdIbGbpoP9pMW/OfJLhlXjEsopKUJzt0X4khZ9fnzips="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.2_1572618444730_0.4859228017788717"},"_hasShrinkwrap":false},"0.10.3":{"name":"@react-ssr/core","version":"0.10.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"08b3184b7382dcdfd886dbfa4282441ded174ea7","_id":"@react-ssr/core@0.10.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-4y6FeuTtmmqwjeLF1nT5XfVvgKtsZNcdkayyuN3GVOtHZ2LBL/C3ZNwtEjPK9GBgTj0wewCjgf9f3nhvTKOm7g==","shasum":"fb4d3acf648540f28dba10cc400fa860309be2bd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.3.tgz","fileCount":25,"unpackedSize":32666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvOMbCRA9TVsSAnZWagAAanAQAJOWQvH/rWvHz1z2h/k2\ngH66sJjmaW0miC/fmFvxUhTHWBNPLDocQx3yngYLj9IoJ0jbZZfHSZUqxAPY\nVBdzwf793vVIKWl+0ZbR/Bo6xaC/gwtRXAasGi8nt5aqglXJ5zZACGgvkG+c\nzWHHFO0msJS+wsJWkVpmToAk+MmLO6dPTuDKJy/iIMW59EWfrMtw2z8i3KLs\nAuPTapKXg1/vQQ/AM0ZAhvueoG6xnmu6IrZFe7fGn4dsZ0eHCIcWZO34c7S4\niSCgMTNF83OmUyMBGt/9Kqn1oWpgKmCDP02M+wzgZ2pFcuplpCXmZRTh1tOg\nzNAdMU865byuVwlzz17zwV8HaGjbxsNbx1jQ/pZY/knUUIiE9+E/YEAg+EsG\nInpbfuA8wfsvAxYW0LkOskkEzjlB40CsiAhZAkMtFmjCSb+4ME7S+fZLuNwo\nYpDPP+vqQKgRVcFf+4qHZOWjKrBAKzujDjpB5ws8f2fARoMjBSMM+zK5Jrka\n2z12Tmut3qhHFNx1Y2q2UJCvEG/vqo1isdEg2hmwxXDNnuMNFHxkaJTMUdgN\nQ7v5ngKQglwi3P/dbgZXJa0BlsO2Fg4EgbDEzBEWHjoY3pjdkcqdfeMrJ7/Q\n5WDrgmRYvrAVWrSZ1yyQMfbOOZ9fm6RpHs8WTXAl5+6ZyXMQ/3x6OXbKLCbU\nZEv2\r\n=OjG/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhD07IRCWBtG45Bp+jzyu24SxE7Tvfv7/PI4YiRqYnlAiAUjnXJF5bnimPQkwttIARZPs7ZvwdLm5v0TKfwBVkJMA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.3_1572659994442_0.5099563287902507"},"_hasShrinkwrap":false},"0.10.4":{"name":"@react-ssr/core","version":"0.10.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"036834932e760e1b5611aad2d7720728785552fd","_id":"@react-ssr/core@0.10.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bXzkzX9BfGMvW6HE6yeLDRt2NdGCI/KfnhWcWJslCXqo55pFTAenrDdO24HrYXOeQV5aL7YQukzvYhvvXCXfBg==","shasum":"d73e91654c1b9a3fec57905bc4dbf7aadde4415a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.4.tgz","fileCount":25,"unpackedSize":32693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvOYTCRA9TVsSAnZWagAAGqMP/2PCDrLEeGrwyCu9SJVd\nmJ+4oyxU0Yhq6rm0xy7cob2B8JpZw5ngTx1w5M1JoXDXg0nX5wIn3QZ6tUdn\nhHYg2zVZ/EvtIJ2vq79cbpVIFu96jJdCagJ+sHnOcNFALetM2w3qxOPY1rgf\nqjDmIU6DWoQtpFjgkcprKVjytM/RlS7mboWOmHtcg5vFBZmg3YMdReVpItg/\nEIxbQfPRBXEAb5QDqLFq2KcGocNm4UXh04v3i1dGHPkK9gZ/BMa6JayUgY44\n/G+BWb/tFDWkG8HQDnK+pDQ4fFCKK/Dc09Gq+2gdSFYB+9hp0XeKZU5U0K5a\nTVg2Gcg66tYUKtGIqZ+wmvTW6Qmk5RUleSD0iWG2QtwpvQiTqvu9vE8tQae2\ntwN44gWc1xJl2jsJUTwJSmTtfb1XDgERUcyKYlJ6vLHW4jKFpA34q7NEmVHM\nr+5zzNiEKU7zgaFCWppctCtzMyrBjoP6fk3cH57IhBL3qQh9aj1T2e5qxgm9\nM+glKOeJsz493zwMtMt62L5YyHY3ws8rdmsFUhp5LGiF6PInoGvDqc7BMSGX\nnrlydWxJ1+zXwpN4M58O2BMVoglC8pFZEc56aJ+rFMGLTCsnwiC/41GCxzIp\nzxrTlEvFDtIrQdKdPvAgssIk3yQgsILiBXp5spPg6iSKeyS4Kr1fg2+A7ED/\nuMzs\r\n=jtmU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWhiSd0/o0bkalanr1fmp6zZuphdwb2BzvuiYueGY8nAiEA+shj/l5TC6t0TOta5C1u7YPSgeGL43hY2IONNwRwbs4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.4_1572660755199_0.5006519540118972"},"_hasShrinkwrap":false},"0.10.5-alpha.1":{"name":"@react-ssr/core","version":"0.10.5-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c5976299a9a91daff163745bee49b7ea0080a50f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ry2NnAOYFNNkyQDA4SWE7pb+aNCle72jF/ZaWR+6NZydF9b1lAqxdbNV+7DyNkZfaAmBWHqU0OuFSNvrV62cRA==","shasum":"a56acc089d31e0e029ca4a1125e4be039b6c8d2b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.1.tgz","fileCount":25,"unpackedSize":32912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVk0CRA9TVsSAnZWagAA52wP/01ux3iRj++34szvmP8o\nWuGfZote4soUnW0GajD3Q0T31Z3ugaCadYm2E6VR7km0CnpiQknZEvv9CSkD\n9QrJGE/9VG4pNVRvUdsdT18wyPZ8lWlso28yWIP3sr0FajW0qiikiIe8Ptzo\nVuCyvYmhdJhLj4o1O0UqD7IB8nsbRb1uh95UHuZdTKx+VRTEFR/HcZWBL71R\n1hyTsBreitGNtfsxox9tFV69kjgv1NBCilLzBnpVYAOjEcC1+9JJLVbAX/Nk\noM+RgMcnDp11PgQIdCsmS+nXoIIzZA1a361JSAQYL+3/k3wbtWyhEsXTPKDO\nqQlNYle6gYqTYjPjF1jaDi7mHz4Xm+FqXe/ypHqxKX2mdH5YF7val693kJzi\nHqSqJkhz5FQPuywD/EJwnYBEV5ZXu7XCxMQvIGTLrHbyMw03B19yHnG5YdLg\nFa0weGBtTjGPEbkCjN8SiVi8TaFItNjJgN3DBd4RZutbZ4GNmfHsQgrzFHm0\nUXRjs2R0Dxi1LUoEYTWGiS4CJq+b0lPaSARoGc5aKzSL1Jfqql75TGCa71fG\nv3V/4Ze/fi6MIA1Y5YHqnA0JgWymA2am8bSN4tuKSmvuNPw47qEtoPu7hAQS\nN3dcFIAr4JRSt0abyP3Q7NAl7ivFc883GMAnogLbFPUBo0ga+O5eh+N8wXEm\njj1m\r\n=7ZPu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcDJ9zWvQsKLRI7OAgoVV6vf2hYjbb/0n4SU3nUObRGwIhAO0gSUdloLQjKR3hC/v4FY5e3cawOrO4py6z3diOL5lO"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.1_1572690227918_0.5389977135789032"},"_hasShrinkwrap":false},"0.10.5-alpha.2":{"name":"@react-ssr/core","version":"0.10.5-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bf7509582979e168b81966d285de77b57faf0bfe","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+Jo0tkooEZ4z/XtAGKae7Gcr8RN9m3bv3FJ/xsj5KUxt3PiJZtLkASmI27KtCWRmRgXV6Hkxptu38ciqHV2Hsw==","shasum":"51212ea72daba30fd82eabda136f60655b5e1405","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.2.tgz","fileCount":25,"unpackedSize":32966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVnPCRA9TVsSAnZWagAAq14P/1wDGjTjJSIztmbv4ztv\nNtqisofAUyYEzCj2jSDGLzDB/KitwFCGwfd007F6g/kTk8ndVEgOt0JTpBfo\nIYGFQEEtFqkEUq4T7WzgOZadLu+QYLSIFxmmyokL6BOdcG97fbF87eUxuTxR\nlWHROgkFhhkq5bTARQvUBGfx313TOQiABtJxHDntrNEP77Y8AvQHnYkvYUYq\nNS5TH5NrIkCQGs+nCAB0IUpc6FM/fPyQt3y/kD06M3ILYbJEW8GmQ0FsU079\n86n2+OdLB/N3yNq5JsifX8L8nrp3zgwTQFev0qxuJAQJxWu9NPSJeRNORycJ\nEDsrNwaHLOvPi0b1wnk/bDaqWVX/zqU/PFajXCnOtjBPVsPTYTvnkLzt2Rfs\nXe9pjtlIbVhHsr3pFkqlwswH1ZUUxoyhzPMrl9A4/K8pPuka0lzpexowrL9z\nTWYJ0CbLh4wgz1WxgJJdA8nDzEhJ0yzh6qgSH0QLnZlYIO0Z9PR91bh5Ut56\nd6dwEYFmtHJS8Lf6PUU5ml/gMqjsHuTsLx0/1888fVN6b/xJU++GpeFTDoYf\n6XLiQdUc/AISNJ9jATK15TsDzMwbZHwQ1uax2EbJd0fRs4EJTJN7/VF5YEpU\nxWZu1E+G0zAZDtarWDSyYIapBbQUc6iSxajAAendsHmSXV7tJFkkHTeO7dE9\n/RZZ\r\n=bjwp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCP6bKIy/p4NTZntZxqUAFvRdVRBJcSpmc+vctMHC/bawIhAIP2+OmvPK9UnLqCKpxJBw2ohUtN6p2Pysp/y4hHmVfU"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.2_1572690382591_0.7237091318337641"},"_hasShrinkwrap":false},"0.10.5-alpha.3":{"name":"@react-ssr/core","version":"0.10.5-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"251ac116eed75f21993f2c4bfbee7eba196b032b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LF48GMzfQ1EWRLCXDC1nrRyEbXmNElheAFZvOQ9uPFm57QlisID3fZht0p5sFSm74P+bMCI0+tiyw0F1LpSoKA==","shasum":"5ea76faa770079be88a7deeef69c20be443ad425","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.3.tgz","fileCount":25,"unpackedSize":32985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVpdCRA9TVsSAnZWagAAsRwP/2O9IO9/2ipVYCJAusQ+\nksx271dDrZZ66xQz/h8Eq6NqqmwHK3bnF1Grk85oMZR0/7Dx8xpAXYqO2ggC\nMnBpDT8y/qmI8g0qTUg8Z/nyRpR6IVo8VWwt//jQJ8eP/FV7NSxeG03+gm/Y\nJEqTv/NiDuaaWE89e4H6fX0zB1Keiv7jTMgtWe0/an3XL/JEEWqSbzTCeM6W\nqdFrqySHP+6XOnHcSu6/jYk4kxopz8z8u0pJICTlwmpPwu1vWBAkthsu6uaT\nGFPkP7QDRZKF2Cp1+jILHUxKKLz3LUoi04x8CiMeLBUKUs7Kj87Zp1gF4svU\nnIFZxcc+dgIiPhNiy41QWPBV2RYnPu7Z/rot8nr0RVqvSdYILXZc6KlxcbDQ\nQq+qNdllk1hjyj8dieedJmGgC7dkaA8i/uxNhGpdXRSzTtDI7hTQhbOf0mfo\nNLCPcYqEOPrO8xh3x3k11AzpaPeNVrzKtpI0xgeVS9wbN/2NfeE1PQp6guYx\nZNIcnjAPYYWmfc8VncFGhnoU03EkNUui5176w8MM+e/TKk5xblcHad1CW0rR\nUoFdQQ8gznhSy/e6KygXm6NBXBlfTDfdQVDgk6TxCoK52dso+Y4YZl4JaQiz\nCDQAKA0Lbm4794UGtP23wHq3D/66+Nz7U4M0Du44SrtJgkaPbHNEGt0EsnVb\nbIHJ\r\n=r50q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFvyel/ivtRwSWbEKCgqWCqaK1Hf2f2JepRP0dlXoj2UAiEAwo0eTf5ZUg79CiTXa3bohCELZCt9LKHk/iao+e0EgxA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.3_1572690525340_0.4548057571478272"},"_hasShrinkwrap":false},"0.10.5-alpha.4":{"name":"@react-ssr/core","version":"0.10.5-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"687347ec2fa30900936ab6a20226a0cd4e3162d1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BJsaZy4G2/tgfMO6UOxIzUTw2L0J2BDQvPThh1hI90UvaORogg1X9VUTvrpXyHe6ETucKZiJrqw1JGv8cUTN6w==","shasum":"45e13e67582ffb9d54f972ab69dc65a9099e9c36","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.4.tgz","fileCount":25,"unpackedSize":32939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVrNCRA9TVsSAnZWagAAqf0P/1IkveY0Gqx9uugVbs9x\nx/guXU8ugEWSd2W/HQFdgElK9Z3vWLvFdrwRIjvibsppsPJB6B9j5LLOHKJM\nuh+IC4x9TfkD0Ah5Jy8LSIJw0mAXPHrnUeGfmGVyt9s5rKYXrYuJe+GHqKA2\n0zEBPngAZ5cQPHJq1pS5xUW//xIqruxiVdP0S/iVO3/au8qXR6VWx1P4Wr9v\nPXzLyu82Jiw2Y1Z5XnyD4Cc4kpLc8T3+mky+gbNi1z7R+y9u8qqgcxFNDhVf\nKsSPdDWMnAoDObH5nS2Q2k/aGkwR27QAsHAyuy+nCv0g/4fF+Uv2xPx1V5gr\nt7aONADxyQNnLRlLl9K72xX1a2KuL0DneOkZ3AbXoZmZ/wumLKWMetMLWMhT\nGB7jib7m5m0h1MmaV0rUB2pV7s0ubuZVqBAUgrPYApx6Y6N/7MNPVYRcNRDa\n+MZyuGwxjEL6/zfjKZj0qDhHc7HH1bWZBYLMaStG/K1/jLpC2BvXOkTB2YOJ\nQJgSgONI3m6aK/zOb3Rs7kyvzQyuxsLpbb3XCRIu2PnoPLH0tsicMstEvRmZ\njrIFbJIB81RSKZcgBHRlxrK//oPqDEBu7x38FBKGXMuGDO66DWJyu18wL37j\nXpqtSpqKtjyrR/R5Kk/XE7SqWhvkjmp3we2e+pCA8dQDbDK0SQ/Duq/L7Q/f\ng5Nr\r\n=ZXX2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkJErO9UzSTSkPcysB7NSdGd9jtjYVwmXMDYMSA/eYDQIhALsoD/KqBQNxhtdzyPR3Jhv8MQJ1y+9jZnJQlN+E78fr"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.4_1572690636639_0.9670479291980751"},"_hasShrinkwrap":false},"0.10.5-alpha.5":{"name":"@react-ssr/core","version":"0.10.5-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2e62273d1ef061bca55b5ab840aa6d760c6c34b4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WuAPIXD5efwAEcTNFN0ysPApC8tSzAVxC/dvJXCBdMndP1XRi+UQNn0OLwlJijDo9N82STGxUsL2sn9XpPw1Mg==","shasum":"bd10e64c32da4e092baaf22c17f1c8b5d38151e1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.5.tgz","fileCount":25,"unpackedSize":33032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVuzCRA9TVsSAnZWagAAo/QQAJclFjz2lb1wQRdT3sQ8\nqaTw1so+z1i0SMc7UrAl/A/XtpGIovNYpdbBBimR40ZU4TrMPV+svOA2ZMgM\nW8BK45UfIxfoVKlH1ew2a6R8eXh5eWohgJF/R/0ucAAuLJR2N1dBpN/rri6Q\n8lKfRHmsPQr9skXjKculvzoGvADnGu/jYDk0bmI/pSXoyFgbuQGWQNEkLjT7\nTBGMuoXzOqVgjxJ3h8phEqDWM87MBwwU9001JKRewNLV8PHk1o9grKwER9zR\nQwzv4esMY+q3XUuLeFCCoVcA9RQ93LFVRqV4KOtFzSKDNPXEm6NdNHsr8JFe\ntZQKNsXlwqNHj0iB1UCFZslBtp4ClGw49zvB5WkJ3hLnzQQ3XFw49Swd/Z0V\n0C0A6yqn2OdHeEZNcDs6MAGN//8JKH4HDkpU4u256mBiZN0gQf9R+cQeJCpE\nIlo2yPRYvPaV/tAq6cJczbq8oHrkY9yZ3r1A8bxJgBSUkmmFGv6tPRvZoDFL\n34IEYEreGbr5/x1SZ9aNhBEJ//sFOl9h6fmPsarTooIWuyLJhJbSX357H9S7\nm0rJgB1WPfTMUHOZ69cENAN1TPL6xRjov5U7oTHT6X+zedGtgGmZ0TNY2Py/\nF880/wG/V8pXkClhw9UPH4PPPhbV6N7PNZHmfttb9caGlhC2Zt+YLRrTaKxz\n13sd\r\n=S4bc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHzBAKUYmjCq7XsHbBD9/IBuBvJ+GS9s2dSPsxZim/LWAiAZJFvShKi+LNoqNDqEZ1XYN/bxZgkP4TdUteeeFnafuA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.5_1572690867336_0.3041590154357112"},"_hasShrinkwrap":false},"0.10.5-alpha.6":{"name":"@react-ssr/core","version":"0.10.5-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7dd6b3208c721e5bccebb66bac7013438af817fc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-6a20BXnPablYrgd5YVnAQJZ7xFbpaCPKQd+O/bhqdyT/qRZBAWLJkjz8uXWc0UgirXpUSok+FKiM3WjQUmLUdA==","shasum":"f004f3e7483d54dda1e2b9a78bfc1558f464dfcc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.6.tgz","fileCount":25,"unpackedSize":33048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVwFCRA9TVsSAnZWagAAGDoP+wZj5WY0aeKQPPIAYdzQ\ny9toA3D4LUEO22YdkUACJunRnf9GL6RfJoMWcohOQUE6j0iDO7s4GT3GHIRv\niu9vBDiuWHJNvQok1Bo4CsIknBmn0AKPBLf+bxoGy2Vp2CO7E5i25LUhLVWZ\n8HXvDNy3lh1OmrZ7e4/kCaZkmGF9hZIIcd6oHcuCYTnDSrySl2023/eRbJHl\nQruJvMfvP+S9eVqmd8Sf8Gizb3hts8jrOPnEctIrEYd4Y3NBPVGOP9P7xUiW\ngXc8ioD0Gb17SFKMHkhVACjHdbJDqfPiWjsnhBMha5h+jfR1jflZ9Ktzfkzp\nt9+WchaAbqbeDybFS00boi8st4TY8z3BkbnBFIW9my6KWS+xjxnu2fIZfdXh\nv62ZBwnubio8ln8acdXfQ0PUFSvV7FvVvux3N5rbO/HXV33XK90bz9qh/USv\nSMQpkf/wqj+8yW6ODsbbJlFSCBXsif7fv1qgKNlpN//7iui3mWjkJaHMLusg\nH8AeJ+oFKcS2kMTEcy0KrXGKxzuYa1QNslPH8bEpjLhTZDOLQ269DFs2u62v\nB7hzog3/BtYbn/575lratD6sI3PcskVkQOCgsm4nWhCakcvt3LDAlRabdBsl\njby8otqeVPMzuTwmTmRz4RUXmrWQMqO7lauXvTPIEILJM1tyyNqU3XgTKNCa\ncWDL\r\n=5+IN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM+FT8jRXYv9+JKfsNpuXQN7hWy2Ow+SFEnNP0LtoPqgIhAIyLLJEFhGCyb0YNGncjLKZzpFc+Slb6215KwBJM7uZq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.6_1572690949442_0.31638528115436304"},"_hasShrinkwrap":false},"0.10.5-alpha.7":{"name":"@react-ssr/core","version":"0.10.5-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4afa52a9b16a570dce7f1ff79dca981424e034b9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-4/Q9X4UQIF5Mc+vsncTdo/v1kBues0ptIovrEtzb84BLidvL2nDkPgOrIw5A1S5uYUoFg6rcz6Evh0cH17dz0Q==","shasum":"09873d5390d7975f8aaadc00e551050cdb3a26fc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.7.tgz","fileCount":25,"unpackedSize":33066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVxrCRA9TVsSAnZWagAA6pMQAJ5GExnUsNN4ZaQvmGaL\n6ouWKX0Ln9H/lEZ9pJFgnK3UFvmeM27zDU8S7yxXM7j9TzljKRYEgdZrr2BI\nDRTy6B7hbl2y+GmAsyKd1S4K8rwh9jTlT9ch10lpxtnU0FTN8iTy2VEIKRj6\nZUJUl99I8k2hkS135FQnE66pv6XXBn+pjAOB0Varu3qamXf8wx6v8H4eMBC+\nyCpYK9katohowqQEchgDhbXXDKGRCIdXvS6XDmyGmWpg3NowAJkIds1gy0yg\nxMLYt57wFP77VrL5NE2I+/zPTvlPNTW6zzYyl+a4WHuIAcwkrSxb4mcYBDDg\nQ+/JKLlvy+lZaS8dh6UC4BY5sujUGsQJtsLTKousA8hJqbdV0ZL9eEkFJsvP\nshoAbyqz/UzLd8PUI5anJ3uWTfxVPc/MHesHfksopPJgRIW4JmVG/o354PJ/\ntUM+faeDuNyE/igL2llfnp7Q7N2UkcHO93HTzYkaoDd4ORsDUAxPVyIR/rbZ\nuOBxlJgcIjK5BHXrCa1VCTgMca4e36jHWWn45X5ZQuvSlt62BHulmOerQN18\nN1Hw0sS4IoaaPBEE5N/9JID0An4aC2r7KMh7fL1jhOL/b5XWM0RkC1hjWpNd\nmrmBo4xFLk78hR5HnuBOQrX/4dmBd8xJeDwoPPS8kwF2jq2XvF5ArlDDYx78\n7Nxx\r\n=2XVG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQtsl9Glt/bKDjzDQjE4ZRy3I9hOsAw7y631Alf0UZpAIgf9Z+rNakplY5wbl2uxY3nAL2nOnmXfsc44i6qN13pXY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.7_1572691050360_0.42592474110919065"},"_hasShrinkwrap":false},"0.10.5-alpha.8":{"name":"@react-ssr/core","version":"0.10.5-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6a99828de3dba9f565d3a5e4df51fcc001dded25","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HijXcBbRE+uE7ZXiUYeMl5os0eTfXwY2NuXEPVitgXLI9iiTP/1OKmUejXtuCATCYkPZlMw62SxqwuFtCQSWXg==","shasum":"805d6591fd34145870bf0c6cd7be51df0357dbec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.8.tgz","fileCount":25,"unpackedSize":33060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVzDCRA9TVsSAnZWagAARpIP/AoVnjXgi/L5WVKok2IJ\nUCw0P8e4B8CbGD1argHCafOLZ79MB2/pg3++ezqBjtJj3vgp3cply6DCGUWA\n6SJRS402bwhpKHtFWtOm84BI2QVgP+1i78B2+ShPJJ011XcuG93QY2Ga3dcd\ne2ShUHblleo+KUfoy24U5YvAbPJYZ+xkggZokgolW939u4FALARp4mk2WNLk\n7Gjx5ITDaG9z9jSeAgyMx+OUQeKJ1wZG8WngzUytM317LxVNUKd3BXh5v+cO\nq5m1jqPbEdV9V/GSAj/1VbPOsraGLQb+DtkNsXrUAPviEjBiQ6ab7WzFk2lH\n5Kegds1mdyBsb7E9Bx0mIXat1j0Xu41nmexRr6CtATy7ydVZzQ/6pP2zfR5W\naEOS2CwnCehWCLGcXMdfdBBGNy/hwULzAz5qyb8rsKRhEcAyMVFmw/wqujqh\npIxXzA1cnnNYjhJNxakmZBLnqSa/NJ/jneSeKbVwYcrdpud5xBiXqIxoymPv\nTxOtGs8a3BMX5GMkB6kuAIZBdvv3KXkuteAQ9HrFaEMThyo+raLCiuGbeEw1\nWpSZT0LezzygL1khkhRhQF4nR6Aas0vtkAvwsp5s8+EAwU/oX2+cqvnUtcTp\nfMQaBIhRcYo9tLApakJ+Sq2164di8EslOOdjNBxMRlvZ1JGjj8gIDRMGzrV2\n92kh\r\n=KM/k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoNcIpaBaav9VcFFjJ/Tp8XU/utwlE5lsXtH65+B4HawIgIFAd3QFvsQyrAiamMGGRyQXSoMGSs4Qs9RZxlAQKPG0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.8_1572691138701_0.9787093598662013"},"_hasShrinkwrap":false},"0.10.5-alpha.9":{"name":"@react-ssr/core","version":"0.10.5-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"26d0c9895b9587160545da544cb5c99b856faa01","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IhvwLXR7aSGZqK9WWFE+sjR4BesM2V5sE1cDC0awpoyqzZ9jWr70bvHYp0POX5vtYuIEgXlSR4aT50XzmTczuw==","shasum":"53b2dbc740ea431e237ba7565731a48d74481a20","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.9.tgz","fileCount":25,"unpackedSize":33032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvV2hCRA9TVsSAnZWagAA44QP/3fyAd2ilHtxL1eaTf9R\nI8ARx+Xb602Mv8naPI1FLCfgI8skVxXRH79f5Xl4KygQ4J0+cupVNOctri4T\nerXj0QxH+ycjPi5FtrPTCEmrvA4gpEoM1JTBtaCf4kEkJKLnTnA+tDqdqcBq\nZYNnB95/ppjrgu//T76ckXtyZj35YMTXWr3lV3ViVdNssyf3Yd9hkT5Eg931\nBn2cpIQ3w0LmzE7xobj9RlF6MbewfhRwX0AxAZ4pHXGwk5el9/H8m7v45n1j\no9nKO3bgwpUrEuPzB9L1jf0uerL5QliCPnSJrRmkjqthcDzZbjBJ6PN/TEK7\nVXpHaeOMI4YzJStID2dTt4L5tnseN3tWldQjAFA3qLEk/oozmaU7GSSEmyTj\nWbggrX+ED84OS0gOo9ip9/ro0IlYBU0nM30bbdBBpfJ8FWhTcNasxoEif0tJ\nm49B5xki4zNfFRU7A1/fEYqdf6Hl7IzXyquZIaCFohE04SSkxgcZhU3rdLFO\nYRultibGi3mKOuoxkJF1mEC92kZgebM5a21flwmuUY+KYUlmUYZikLMwiS7h\njABaHBhWf3QIB390qy8L3mo+FamxTHmoVbr+UCBJIMXLV5sqA1fgCdtzjLrM\nAn3vJrh5iX3STrdT7BHbZ4F+44vOlaqpyz/cQA7aXpMGP3y/wTpRflWEQLrB\nKjuJ\r\n=ys6a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQc/M6CcLhFV61AjVHZzQA8tLtat3geJpqq+opXbrULQIhAJmmBFNWgx7R9S3rgYgc9gZnBh7GS6KRyPSjk1LoFhSS"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.9_1572691360851_0.3594793492138111"},"_hasShrinkwrap":false},"0.10.5-alpha.11":{"name":"@react-ssr/core","version":"0.10.5-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f794f5601c4331248d701b35c248fa0b6f3add91","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-JP0PWDtbnLysLSchGE3kE3447eT3PB/3SCgZLRNBLwUlL5XwWkXsab5ADwjJyaoJ/BvqenXXJ7075XRiTjQC2w==","shasum":"6170a77c1125a0ae57fd3c59767fb8b5150c515d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.11.tgz","fileCount":25,"unpackedSize":33177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvV+9CRA9TVsSAnZWagAA+dQP/jeVXSiG82xRRvOsiJNt\nPXy1qc6KggNzqfo0/i0SNQVYkYbKKoiECdYcdjE1ys78EcHpv0IUmz2yTnS8\ntF0wZiKnf3EcYCmFq1p/lp1uMv+PLD+T71uwZE1qIrL4fIJ0XhZTvuxfbR8R\no0ug+Us/0QKMYy1LP7vSEDq6o+4Qdye29/4k09oGgaWyAwK5YSibyam2OlGd\nMz7C2IINS7ucEkzvVGlXCspz0wdNbEs13JigJFxbx8diyQ1wLX78D8diMRMp\nAUqZ97jhw77PkMYLgD06MKqrEU1fp9vB2hgUxYWNdx+wOxonu74tcKxaYa6F\nr3dnA6AHuqG65497yUep3ODSapNJkKJgUNaL/D04O720CNGGFgAspqQyxtkF\nfaC5LrMq8PQm73rhM7RbVtuoHnBmfYYOHOwzdpGV3t+IXQN42MMkNLEpOq2m\nMW4Mjk6ccQc/++abA/agyaqjezErU4mX5GoQDuDnSVEyarriD01bR6fHo8Pf\nyYt7PJvGJlR9Mv0fOkITXXMRe4n3oNchdScXqLeFmgoplWUvOaebaX6u6RFV\nFEXKLzGCnLc3v+E9RLO9ZOENI5ZmlI9QbZihxKsXeL90Trrq3Buz0FtVQcxm\nJQUCWvkfMoMF6ieuOtaP+Tpl2T1FXRNS3qUCj+7KKt1rSLD0bo8fdQVfHpFq\nyHLD\r\n=7rsr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/kuM+TP5g9Fl3XKSPp7vxvF7MYeF4JRF/MSin3UGsJgIgOaic/SxaKYvILl/Bz6VZ7lPJNAnKybAzPNxHac+QWko="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.11_1572691901057_0.37338253663811005"},"_hasShrinkwrap":false},"0.10.5-alpha.12":{"name":"@react-ssr/core","version":"0.10.5-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4b6f3782d021c59273b37577274983cdd8725f0c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YcJWeA8QgH+PCL8u4R09eijw9Oe2KdMJXad9OdTGtrpJ+8Sn2/zDtGNoCRtHhd1pcmh+z2THYxiVdWybhAGcZg==","shasum":"fc688d7655959b3826013c2b95e55ca556b3abfe","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.12.tgz","fileCount":25,"unpackedSize":34360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWCSCRA9TVsSAnZWagAAQ0wP/R0GbbdhEgqsdN666rSy\nEySynToTp8b2YVuH+vfChDJybWUpGQLkAwJVfzHLPBgdwlaBmGAUoDJKTseM\nNAA4aVB0u13bre1hjzJT1U5G5ZNMiIknL984XnvHCfREF88LLP4ufmUfbMFw\nBkh4IlABfgzraPRGrCc7GNGXEN7dJTTtf4O1eK2fC6vFXLCacRo31t4cSaUt\n8INm9J1yV6NasY/4KDgD8L6Ud+IGoyniPz4Yt2otg8Rv0+EPuMiXH7+eUkj/\nobvY+u/Nr8bVXWIe4bxTKjQGSmfHxiE1IOFMmClR4So+86IKH4SfkA7qUGTd\nMbG0Qkk0nX/nQJzWFfBGFil0AJrEp5tWC36pHFB5THCtJxlqe/nc/cM9BSRB\nYy1GlvvXtdWdrb28Nluvu3vMqd98y724KdEOf665IMgmPwAy9XMl40LQdoST\nsiCp+OgV8+pvuXYrbxlpttb+CaamHn+Bb24LZJMWmCWhc3ykHN0rpytGXNfS\nLp1bONK7cKQwepDxOMvX5ISQX9WNroBGvHQQhiRTu/JW3Tyh1yzrtKvuz6uX\nXrgE65TVksv+bZ90IOsThhQPKhluVaQoEoX4vUssn8nWH0mByGUN6r/znQPq\nNUKwoHZyOHTKaM6TJhhyT3BSjEGp9xeCDSIxZjpAuXWH8VWboAjY9h8LbFUD\nl4Fv\r\n=iLgl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIES1cJypQL+MK3gSnYu3K73/qsRyN6bbYOTdXUhI7bMAAiEAmk/dctuq93NW7XQbUazqGPts8Nj+6JlGPFIOU9NDnYs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.12_1572692114310_0.2390185511727121"},"_hasShrinkwrap":false},"0.10.5-alpha.13":{"name":"@react-ssr/core","version":"0.10.5-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"62fa993f47cc46d346af2ba6b389d4799252ee02","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-1wI9PlabrkPSm88qqyTj7XIVy+74Eq8vs9jH7wR4ONlh6LRdmUq4J4PFGW/AarO81jE/GZ7u4XObHKTkSgXnWA==","shasum":"a6c5dfed465e7b48f6ef1e0b9c8b3505a7ab8359","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.13.tgz","fileCount":25,"unpackedSize":34507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWEGCRA9TVsSAnZWagAAM1EQAIPxwJiR5YuXRSXJhjZZ\nlaKKU8n4mtcNmp/cFCKMFu4kb7D2H+uAA1zVPMBZpyL3uImzmym2OmlRZVlL\nEUuwpB3Yn1nZBptarAnTCqMk37bA6d2gasNpHXdI1paMDg3h4qybt2hyUuke\nuDVk7yk27gtqWIctMK+9dW4KHf1macBFH9FspeT20x1gX/0ksDqlyI7NSilZ\nq4CFq4etFmoGxBGD2YWyrFqwQGEQng/3KViHoEg9we6WEF++Trc3NOT6doCP\nfux9dFhVDjR+rVYltTuMZQb9I5yG46jYgAfuXhlY+FU5HC92tkMNtkReFO67\n/IHuXsfyfDiY2eLAn4spZkXimjzZT/JHWnoQUehnHQzkwIkdB1lHolieo878\nbupOY6ETvm61Cw9Al+28Csg6eiKnLDoLTGyI2t/aWVo0tNy23M8GSYBvU+gG\nGxdD9lttiNmz1JEpqkrnCBZyBGEZLHierXhVNoanX0TxHwl7PXWYlCEDZl/m\nfxB80IMtot9DwX8uHeJp88xOILgoe7YMQBC5mCVIHF/tIVKqY0pYqHOVwwz6\nUBZ2tZOhQUSFB0M/pVFAx+ClPWglPLXQdkOFSpko+dGe5+J3Q1CRtyeIIvo/\nGENd13hCO6XbcyFLARDJ6PtxNg57bNa3fubMIoExcS0Klyzjxdlg6PQXYNYG\nstHT\r\n=kMgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCquzBnX150LV5/T+YO4rXtqQGT0o8ImBnr6KumlpZi0gIhAPkT6qM/gn1biJxKTtILoLie64FTwBQZOERJnZ/JXuBc"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.13_1572692230259_0.028084400187573078"},"_hasShrinkwrap":false},"0.10.5-alpha.14":{"name":"@react-ssr/core","version":"0.10.5-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e14ae364f57b243055c5d85a31dc7ab30f926204","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-phkrHZMA0c8TjAptSHQgk6khLS8DpsiWjykx1tF4+CzJ9Rwa01F7AlCSxfh9efwe8ZG7WY2q5u0lnUgEWhESxw==","shasum":"e220a7a6dab88ca4e1267d497459357eb4399d39","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.14.tgz","fileCount":25,"unpackedSize":34519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWGsCRA9TVsSAnZWagAAOekP/jk8LJvIR1x7R1+1w1vm\nNJhj51TxFNN7xbhPZFV7dkvRTp993ZABdOFrjiTw1p3Q8kxi5MI4p0gQnfsJ\njPoV0ebGsKcinbyZD4W8eoJY5tspUOdp0sBaZ4W1LHO6nU722umRhpqZZPKo\nLf1kohQaxv3al3e0DE4aXHfGCR4kpSA9bekPVc1ap6vRmh4neTW8QA4fnZzA\neJpIK+B5rNt6RyVWngtqn1yken4meFcZ739hYM4lnCdBATeaO5v/WF+TCfNp\nQH65LxnaPx9Ey7744MRDgnAhGaS/qiVGQKRfrzaCwIQx7XTccxX4LXfOJZvr\n77S0PICoHDwFEIwgxsK3RB9/Wcm8sLsv7hA4Rb8rScdJK+mVM5X8hFem7D/I\nwj0K5pwVjWCC8P+tid59lGhNssnvCCNbWJFI7TLD95HjaFETAIDqSwXRCXKG\nezcXmOKzDVlD4Fl49kbsyK10yA7yTzNALmVfmahldmgGip8fCmpzFnTd0wh7\nOSB/815fiOcj1DHrI3v61Uc5uE4MEQuFbKhS3mMYpYULbCt/yKNPGOLRGCnO\nF/8LebTEB38k+XyhvH1xMkBgT1k2khY+787aWvTm6gbbFUlEv41xnDPWntaz\na3ZiXQK4N6TC0v2uC/Td/yaT/Dqhnqxc7crzQmBprMev72A5rlPi7TbP2gNs\n+yKG\r\n=PP24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3GU01yHWESb1aQscFgtxdqc075MubQxQLqZEf7iESLwIgSUZ0XPe1yMPdXsdUvG3GRTcyNhRL3dVQB46Y5cgIFrA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.14_1572692396262_0.5993505526004759"},"_hasShrinkwrap":false},"0.10.5-alpha.15":{"name":"@react-ssr/core","version":"0.10.5-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"485c35f1d85eef31b6127c10a7f2c214baa31fcb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aQR6CELHMH1Hg0FuyAS4HrwgFbBciJcpp4PuefBwZvjJ5Y26kXB7cYTShOx2SpAVpCn3gNneHisVgO2HFvXcOA==","shasum":"e241486fb46367c42a521f14ab0f92b8fbe9eb15","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.15.tgz","fileCount":25,"unpackedSize":34541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWKeCRA9TVsSAnZWagAAeoYP/3V516ERsSeCrhe7LcoX\nuM5RsPPwUUITu1REkqTVzIoRpgv6lu7FnOEMWyx6QdUQYvdoJoHQILNOcMzy\nrc+/UUL5Uu6VILM0ZYVj57fzGYmAgCoGLeigrAJyASWUiz84zOxw3htvNs+6\n7ftN8kCGR9UQJpfh8oRtFC4gCQftyCzPPz55S1PnPzvJLVWsxjj9ha6bC3ZS\nVdbJ2U4xuEgr1G4OEWZ4ABXk3GMdNBRsv1K5cwBheqJABf782QbgVGWxCama\nBfhiM5z0jRrEATp1UbbyQ5Qo6eLCZ2E2qBRxlLX+ZBMz9zQ5NB+SpwZNU2lH\nnEiq3LBiG7o67pG6rKYj94blFOMwJtjQyjlKyaJ6MWziEJ0a99sGhU+3tWaR\nsGlI8EUmuu+fQur0dVyhDycg0kiexhAtbKLcC3lvAzb+b4NlssZBcy+FybCu\nRz3UuuMujrJyCZ6AM33OL/Vz5i5wwPd6vY8aPfybkJ8mWBD47MQbaFN1nisc\nYmR1ZtGWYm2ZtLgJojxwYZXz78k3YleelZM9DLBL+3THUj444MMGg2xgusVP\nbstsvWf8+DeUs4u9RR6i9nHSW1PHeXtP3lyr5F1LQBmc/HU+FWhrXOYV/Mxl\nbfyebNKDRWHduo2TqEPTB+sJyoOIbhwdQI/IuX40ssRR86WlQCOn+eJc3Lox\nmwZS\r\n=WcoZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxILXG/2FHpsnwK+8XyTWUKb0/0OyyHgoY8pJHDUzJkAiEAwbfGnM+GAhtiOzVJmB/uQFKyr909ByzSH9xRvjakqpI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.15_1572692638408_0.39192932612860765"},"_hasShrinkwrap":false},"0.10.5-alpha.16":{"name":"@react-ssr/core","version":"0.10.5-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","react-html-parser":"^2.0.2","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/react-html-parser":"^2.0.1","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"65af21136cc06dfb88c0caed9d63de7880807891","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Th/ULGMHA3RuIWzzcNEbDfv4G5ZqJCXZNXlvQ3oVSnFLcVcBmJrVPI/iQ4xx/NoUFamPL7U/BXWihd1embPE6A==","shasum":"2035ade4876f67fe4d670a982708daae38126782","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.16.tgz","fileCount":25,"unpackedSize":34605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWQ2CRA9TVsSAnZWagAAtZ8P/0PC39muW1qDKn8KLKxN\nVqb2eDnCFlrJ/mVMYC5aBl++EZsmHyfXmSYVhON2nyM7sIMIi70OvpDAEGvM\nK4Znhzkn0/4hf/EfoooRAaZQsc/IEX/X9qbEeGK32Vm9S1SEJeA76hAyV49O\nncq3V+OfyFq7e3Zcx3/6m5veEgW/SDgtjzkcYEkjKfi2oG32pxC9sRVVtxse\nZmpKAzhaukneXtn8uiiuWITYUeJOMQL7zEJbNyjS5c4RgNLdYrkVbCCoeUfb\nmCqZa/L2F4NywbjYVyhTvLMLqp982AkK4pFtM5UxWU56NFQyOMkZ+T3mLLFV\n9yZE5jmwsL4eIcWHa+oCOLSDFmVX5emctSJVBzKWLLW5E5m6WyDzyU1We6lb\nhxLLNCMgFMz6Iag30CbjXnVcAkDj3ZES1qjYptoBev9VBEtKw4z/O8eFoi3R\naCsLj3R2Zr/fz+sEdadlbv6MlUGfyKOQ5QNEPFqj/gRXw8u7UTE8fWMJvEV7\nOXazsXdLb3+ZDWYkC7hPGf4e6cz3EnGu04Kwbq03pZoeKVmhWPauwBH1zWeo\nbWTqWo+ELnk1rAMLqih3N4537fUD016hmwuJt51nNR/7O7QO4UStc9oGakea\ns/v3eEd7H/Ja7QlTJdb5Eoksm5dzglzt2wgs2tjt+SNw+gy73KuslLJ0R998\nbBcr\r\n=t70f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIQhECJwG/q/l38/fCqykXakRxnhJ+kVx+h3u/7sOhvgIhAObsf5EFfp7bJ71Q9TY0hSGzfzxYiMGwdqgtyZ8BoV8W"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.16_1572693046619_0.32117802521550276"},"_hasShrinkwrap":false},"0.10.5-alpha.17":{"name":"@react-ssr/core","version":"0.10.5-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"43c6005cf08ebc2c69542bc7a95055471f8f550a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-u0dQrlQX9MhNfmjCj2XEkgebNEbfksBuTWzNeEdAlW8zC2oyRaS4LaFW6F2Y5ecRiK5ZC2Rw7fR180XP1NdshA==","shasum":"1bd10f1224c24755b0dc253194c5fb0bb22c70d9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.17.tgz","fileCount":25,"unpackedSize":34219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvWY7CRA9TVsSAnZWagAAe78P/1HfGHS5BsEs+5GManOy\nza1sFuDwFiB9S/LQUU66qsvMoXxETFSTRSzrLIoDrbgco04IpBNjw8r6Ezi9\ngiyz3ywudqqgexXOxKwQWYK6+/4ZryxZItkruU3uf3+bNUsJJ2Edh7ridEZ6\n+CzzrV3jU/A8EFE84aDVsueG5CYCMHre/QaKGszFvtWKsMqIq16EiUe7aRf5\nYQ00tRPwUEY4SIUJ+BLLXQYPMBnfuUcMCAxEkCGVOq3rxYQZOpqOHe1KStxp\nIyv/L0QKwYgJxideYblFzATrSCgkdIw/C1FMwwryywU7YznJslfAi6suCP6g\nddB51OMWQY4cYzp9sjrCp95ZLAvljlqA8ym1KQrsd6y+WtNj/YYEOzEqb2wQ\nR2dwAvYIPZEMEymklD4R0hWItR30DfVEB1BumurlalBn33iHv/gRAmXJYkHh\nFdQvRjCcqjCOXFBOEbZxP6Oo0qHUCjoQI9egTuh9LZqUhrHXYIUIgXqShrjH\nDuVuR2uUsQkSQ4NUz2ICUUhoDlJggiuiqdzUM6PPXkcYylPSmTZjzn9tcnSz\nDuRhDRehvApctNwEZANABP/iO3unrqxIfajq3xizT0V0797izTDpK727kDvO\nQPTsYDMicj//t+v9lAa96VXMR5/9GCej3OH5oH84nkZ3AsKSyc1iVMOvfI2O\nqkty\r\n=oQH4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAQqvdgkNv5erUGD425AuuUqd+XktPmDAPTtFdpjy18bAiEAjUjLfgwb2GCLVJyxQl4uzhT7UQjYuW4kp16ExyXHvog="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.17_1572693563280_0.3393679737753519"},"_hasShrinkwrap":false},"0.10.5-alpha.18":{"name":"@react-ssr/core","version":"0.10.5-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6bd69b2b30c65e690f4a71a8544752c4feb6e038","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/AQEtLXTu+rsAE2602oLCqpff3Q6XFH0prRHeAOD9U2lInH2nDNmruPjU+xrR34BYvjhW09cweHkWfmJ4INivg==","shasum":"3755eedb56d05a82da9b2f9f93b0c5d87086c77c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.18.tgz","fileCount":26,"unpackedSize":35236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXAtCRA9TVsSAnZWagAAHEQP/RAA/zo0PuwrIoV2aduS\nMKsHK63HlNxO3mlTh5MRMnday7dEgbXpTnxskMw3y9BLSBlY1a/3QzwXfmvh\nkrUKyh4oLcsHECZsY/BAoENBPtyh8hSwyDvm+ktzyPvMiSaNulVla+zoeozv\ncO2Ah2q3U7KaOD+8G//HFsncMM2zNyF0Y2qlPzY2NcnIgcK9XK5YBbt6MfqG\nVEd/6ZnDlczJcBPmxvSqZ1nSqLbOZdn+RqZSO23fUjVW0lKmd3ngX620kRb5\nH9bt0eHR/sQaOEAMdvKt0Ov7A4jmVikWQrqkeESZP/Xur48G15tZ01A6lNcs\nK7dM2uSZhjAk439ljm7lEcTdxCipHwz30MxZPwZarHbnKBcKhZetOUqSsfhT\nxgC2eIga3EFumdAul0JPUTHi6NwYGignHhPuBd26Y1ccycmG0hhV7oL8eOQY\nyHvTM/3By8WgzI9QBto1GP/wq3fN9+jnAr7NImrNRtw5Xo8KvqV+rGIm6Xgu\nzWkEVKgQSM8uKPtv0ljryt0aZ7KwMSr5y8TV/Y20hG2THAwz0udg/+8JsUWC\nBT8TAI0VZ643a9S5anOkIfBZ63DXIydd+jMksscVrT+uLt7ayNNeGptBfe8D\nn+KqI1FqrRlNxkq3BrPvf91aP9+Ksz0QhMWbmt5WyiGa8OUpt331RzmhvpYD\nNQVK\r\n=KTQC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9SdifBIeo0yU0AemOLwkz1vCGTkkVyfbGYU+8ImPjiAiEAvIVGCkJ8vO/VwaqGY6/Fo6TEvEt9RIZezUdV94X1e9Q="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.18_1572696108629_0.4730940834338384"},"_hasShrinkwrap":false},"0.10.5-alpha.19":{"name":"@react-ssr/core","version":"0.10.5-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"51317de17a57d2a56dd0d171002e57c81381fe54","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-JuavrVgbPeDCQSt8A7HHolyzCbZJd3TOqCmUFetDrXmXa1Dcd7y/HU+1obZ/n3vpdBSGbJpnW9yyumZrPKdbTA==","shasum":"27459ecc68bbe24d1a2ddbed2cda6ae510aa83ca","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.19.tgz","fileCount":26,"unpackedSize":35287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXGJCRA9TVsSAnZWagAA+XcQAItQcWg4o58JeMEooh2Y\n3b+X+An/O2ZvE4yV4pQL8EYNjR6cb/+J2lqwZdMWBJLsBSF6LUGgvR/pSi6j\ngCtv/ys+3aqF0TwKDTiynhhO4ylyKvkdE+6KgFAmZkT4Q79brNDKRc60RVNA\njdBK4hSgaUpzx0E6w0MKGws5MtsXd1qeHhfFfnP7bnvZAKeyS9CbgPT5/+/F\n4wed9D64S/BDxiZxvwf06VSJRDq0CuqlLZKI6UzRlkaV69JF0YO7D59i/K/9\nmvP0EzE+GM4PN94I3Ph9Ppkpdu+8L0DRZFU5ea8x5SsELQ36a0yDa9vbVsPm\n7Oqut7o7ECbYawaZtNaIRL93Yd/Awya6L3Ro94aLKSV2B9C5cBzDfdgQ2tPD\nuazLMUF8BEHr/X3mj/n/y/klx3qsGF8pc+tRd0qoyWPkQSGWjn2+iamPhF9W\n4wDmlRA/K/qp7iLRN+lMRZkpmho+VU8QT4Dq8pk/YqFF9I0TkJWfmkMRyovM\n1KekA7SHN0gtxd4+e3nEHbxW0utUwXqzF3elLMeqGw8Rt2r73eSSQ4LPVCNV\nDJtRklF2LZYJpvxFOJKxfzZngn0V7yRNX+8lrplV54yBOSoH8vIklMTlSTUU\nFL0prmhCPeAfysaEj9LHEHGY/0juuFWVKSTHOkU9wEkk2fBAtjI1jdT+iSga\nWTj9\r\n=uPUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFtzE7UOm5Q83HXKIZiXCnL5riYgPBh0kiuLYQy1L9rEAiEA49q5L7YsLYi4ZaRF11URbQNjnv9wUpvP7FHgQ7+JBB4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.19_1572696457380_0.6750217931063154"},"_hasShrinkwrap":false},"0.10.5-alpha.20":{"name":"@react-ssr/core","version":"0.10.5-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5d70f647b036a20eb7739147bae3779c1076f36c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VrZYw5dAE3pj26v7zJsA2vo3nGu0tTd41+dGE54A6Or/UcgCbmZup4hOIMyt0SPQQkWgJjHCasrDfWHzizk8DQ==","shasum":"3666f5ee63cbc24f96f9e366dfc3d92e13dabc3b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.20.tgz","fileCount":26,"unpackedSize":35283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXJqCRA9TVsSAnZWagAA4H4P/0hq40HQgtl7byBdO7Gd\n4aMvQW4ZMqpPGoI2LpNbDrzK41CRYVKf+btm9+kiVF3rGg1yGjqKzRwOcvZk\nIxVvixX+ZvjvXpNBV5zRm9PVQb55/DN8FaRUjuztGnViLuEkufuDrhCRyD0p\ndPyqb3Qo/6fNg+58QfIuUNlTnwWn/aKY6txMKVe27CjO2t8jXBKui9GMOSuJ\nHo1ztPzSGPQ3BLMpcVTA7simDxBD0qbGaf7imT/EsDRumLZ8xxUCeWlLITI8\njt5jDs4MJyA4D/464FQkuUX6nDV8DYFhfia1mHrKAjEbKz/fW7pFEjdC63r1\noLG14l2I7oqhpiXiecLu0YipLosGY3WD/+hahMI7EagAcByscbuZaQmb7qev\nwjKRsDIUzXqEz5+6jLjGaW6RDO+UjnvCQ2A+KIyXaJGiZ6Mms1XKLZ0Z922V\nOjWun8tC2mfZBhBLUsk5nUtW9wLTYNmk50WsChrJ6PXsDH+pp8r9neiDaibc\nREVCgdqfBpCkQicODd2pGiN+2XdqUZ6Cs8kqCKM7VknxVOb3g3sOHTeNfE2z\nRFdSfuWJmPNHkJdkFYSZjLQtM13Z7/xoExjLxH8obOEwQqbVof8aCzJ5kBcD\niMLPKHAnA9aAgaVEdQa2YvwbQ9aQi9SwF9xozlN8ZOSXiHP1JF8Hx9dRD7Xp\nKmXn\r\n=Gwff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1NuJRbTsJVyyW3iS8K80+156iaoR9Y5gsXsTM6LEYUgIgevOrj4DiObYobkNk8bpyc5vhzhLPc+3b5aiV6ayCxg4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.20_1572696682030_0.23778729314653346"},"_hasShrinkwrap":false},"0.10.5-alpha.21":{"name":"@react-ssr/core","version":"0.10.5-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1ff78480b8bc8af3fd56c254e964ac42af39c380","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LTDHOiMrgz/oEJliOWZPlC0Rv+nvmtwX5Zfjn3Byi2yigHKdUlQxtKHs3EFLh/zCxfojvNZfDStyANsBl/0ezw==","shasum":"68bd9b30444a76fa8b711d4f304dabc2b1790695","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.21.tgz","fileCount":26,"unpackedSize":35306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXMbCRA9TVsSAnZWagAAQWcP/1/0eX3OQ1sqoAQ+vkYV\nqRCV468UX3vCe5f111lr52wrv/w1OAZgxX5v/jXCronS55drJeUOAjN4oAuk\nuR6BZ5n3IspIIhvjfn36tMHNw5xnZDn44YJes1RDmRkYzJCTV1bpw44aHzZq\nVq/Lyh9Z1DL92CtH+kh6pOTliLbSpEJAZLx72uuwBMg/XGYubbaVBBExFyJX\nFq/W5t9D1jRZie2BdzxvYoChO0LDLwtY8eZYkoNDdSFqw4TmRbTaLlYZ1kEn\nYibwFAU+e7PHOQ2/uxVjrq5D6JTraAAYup0X+PNUREvjW+Oz0LiHPzlirhcT\n98a8oFxx05i63hdGIGtoLzeXOu/ZWyfuZ69D+Z7lvjTKz0bKigR94pP80PR5\nMrqvr5I684gD4dg1ep7BlyOHF+1Efbvj0gWttni8aHXDMNmeqg2JdopfKill\nd5hxLx9ZAsAuiJNKXzVrdOmDwNbRuMY9H/2JhSGFly1X6jN0gnh3Du9cVWUb\nosritjMfE4vM0hcxJH399EDttOUylh5zotbz6xfKA+C4PmqukdjCsLx5UG3G\n+QU8y47rKqkL0jVvOoTv1a0fjQ1D4m4SiLAjMrVszyHPsOFf6MU7To9vaLak\nvyc7y8CAfLw+6Za6Ku05uJZ9OVyd2KXV0F0dIEbs9tJ5OpTcXxbxmmWc3R3l\nBZUR\r\n=lKcO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGSuUpP6XwlT8C8xysyrXk63V305qm6fyf0Y0UpRtKMQAiEA20FNdMD6L9/BtSoHT8kfVui7wqsYBAjJQoddSVFfjuY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.21_1572696859195_0.5667361444169516"},"_hasShrinkwrap":false},"0.10.5-alpha.22":{"name":"@react-ssr/core","version":"0.10.5-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"29b882aa73c00a2060b7c15a7c560f55b03c8e2e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HqzgsG/7YYdyDhri+NW/z3MVXGNVkDhLV7V8VhNQb0ra8KIPfe1H+flgndoUC2K1OiaHFJu972nUPNebk0KeZA==","shasum":"fc3920c199032ed71271e6e3fe612deded2d1eaa","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.22.tgz","fileCount":26,"unpackedSize":35328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXOQCRA9TVsSAnZWagAAI+QQAIfPdx5ttjLHPB9s1Izx\n6bV3CsZ+If9axcbqnhbNTWNiSFQn3n4ke4VHYKNtC7W9zd89XBcxrH9B97bL\nLgqDocUoNn3VTmpd5fMEXS4kdg5OFziVLDkjkgu3v4qwSD+OiTL74FBdZxA2\nL0eYXZ+RQGRpd2wJ4AE2ITVBi79MHpmw4GlkWhukOwdDk/FA4fXuWBC06vHH\nRUnL/97r/VyapxJqx0Crp8ToqLD+IBTrjJ1kjvA7Y8xNr0ZhbsYDGfBZliW5\n3lkOp5bWArKprZs6j9ZY3VZO+A+hrmHpP9qzHRAGZ26hjg0fdt2Dm/2q27l/\n96LSXAIDZW5UEGrQcYTejVdn4aUFO5gLi+dNmNr/6eUQY6v9NqxfR2GCTEt1\nCa406YQ8qA7ENbl0hqPtXyQ/XJY0xJQVPqcup3JLQ7xQme8QlywV2phS9TfR\nfjQpTl10P6fFf4EZNy69X1ys2FYrXcQFhMA4GWCRwrT32QVOg1cvWr9jcf1j\nMyKQMy40A8I0ygDOJdowfcc+HXZiIJtAgBLWUpu7hXx8Mzg0RX3GK/9RxTB0\nunyXVQPLs348RMG4XBnsW5w6pHjQ1km20cdddBOW7JQwl4ZTJzFZ9t3bN3mL\nQsefUZfz5F0mSXsOu906+i8MPJuuk+sD1L6VrWN8Fzd10GkOThcPHNWHh4WD\nqiX5\r\n=A0K1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICB0pFhxwZ1Y7nQlwwtcSjrQ8aSClV0aW8KuRaQYpg8AAiB0qzzjDWhiPCaZGzaM1v4O+ZiZkrohoPCXnQspN/SdOQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.22_1572696976283_0.7243280855595939"},"_hasShrinkwrap":false},"0.10.5-alpha.23":{"name":"@react-ssr/core","version":"0.10.5-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d21a9254cab9a9d358bda7fb14af1406c3f53ac3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3o7+drojEsSX3y5/7u3sxc7mik+gjPyJtUZ3KyeQzvpCd1xkn+k08WQ2fQXwQKm4luZwHF8BXQu4Om0V7ksIXw==","shasum":"b1704a56122267268019531702eaeb4a416cf8a4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.23.tgz","fileCount":26,"unpackedSize":35582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXXSCRA9TVsSAnZWagAAbmYP/0/ayiw2Ohundt7mCv+5\nUReECmoCLHZpCt8Zjs8OEAOageWnJnncsJIfHL2VylzpEziLRFCzuYZnplLH\nZhJbGQ5Fs2O4ldOPefFpVlzwArw9ndlW5dBsDnZypbHXTCmUMTuSt3sQ7Wwh\n/El4ddpf3fspX3BnzRLE37FpyPccYhPTAcWiVExapcVHyYZGwu99LZma2aGm\nWX6pFKeFcOfJW+BzBk5epHpggX3yPn2B1PC2VMHz24U/H3WGf6Rr5bToEXt3\nrm5q/fgxAe6AtRfMYDtF6/mGXKCz1oz930BY0mhL/c5Jmr6CfuoghC425Uys\noNzScvKzGqPpZtlvJj0OxTvBIKMLjz75hyzllGjHZ4b60LURXrMmbMLv9VxS\n6qSKT0oA4R1pNEtxKqoe/TaQ2Ech/qf1aDd9ZfWlg47O74MjOnf7su1dxq+i\nhy0b7plC21V/EjW9u7hNupOXqQfLstYzFMJAsqA0R6+XJsdeEmycC/PeN892\nWuilMjz9PHKzt+GxWavcFtcuJfbg8w6lQP0fZzSCeVtFZQ5VfE3eC1V+nwlp\nmjWgYA+0wHRwSjWd+7QjUK81h5UAJwnm60bZDfB1+3CQV2FR/dbpwCU7Hi2/\n4XMdNhE3QKAQCbAlDeU+bRZAh56O5No6SN+I5O3PfRcYO/IWipc8GOjuQjZF\nR39r\r\n=oSZN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBec443+3StKxZvMDtOJ2z8FMDHwBu15IWAeXx3/bV7jAiBLT9xH61hobq+tPPyuZWpF2jpmcKZFJmr0MChifGQKGw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.23_1572697554456_0.9781709427034238"},"_hasShrinkwrap":false},"0.10.5-alpha.24":{"name":"@react-ssr/core","version":"0.10.5-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"86f3e755a2f4ee4a3aaa87651bf43ebcc940dc80","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RZMsYkIcNXti6FwHygK3QJ9+x+aPZA+TgfBoEZLz5exivcHOFxHJcuvHFzdhYnbUVeipKXThcVBhGpZNHrz0LQ==","shasum":"f9bc0b30bca3e09fba353e7e96449f3f799dc57d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.24.tgz","fileCount":26,"unpackedSize":35534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvXc3CRA9TVsSAnZWagAAJNMP/3giodkP5V9E9sJaQsQ6\nxYY7njkd/L0PxfFIEOZ/21O9QcXd6+SWmVgaILO8FP5BOD9Vu/rW5l+yIf6l\npD+7DZRn5pHK8uTj13E95XgdF/9EAXCwdBENFBOagedOPwl4pPfR70XSWnF5\ngrSd1yNe4kIOfqPPFqpIDPApeCcP95TvY3drFDrqLIwJDVvOweCFXSYUrwPW\nFf6ICRFevfxHhivwwgwmuU9/VuGSbY/nLcIRYegiofb+ysxKm/TjS5Yjnbm3\nYzxvT73B6Mgt3JK9GASGZHegYgct4p8AwrceY8hYjIAOykbMSUDzQDxB27AG\niSp0WtFZTqj55AbtnIsKzhqPrIcDASpLkA+04Z4uhWwHOM+tLfTV73TYyBzR\nJ2iz6iHggwmwmZFTzWLcIPswJ2xh9OMFcWjG3l1vmMfPACEjPKmnh3Cz0uFS\nfUULyBszDVUq7AJavmTbMJkhWGW4Iu2Q9wdaOJEgXwwmH0UmJ/eR23oRZinh\napuJAZteZLpYtqWka7K27Sm4p2Z/O81FEy9BFvztUIPZ0bNMZHyIDvMRluzC\niik3EisxZVBAUMhFvTwxzc2cateGFsdQ+Kj2sqNtWVHkeEe5DHQoeQI9cDKW\nwcFZXcAUL1kKY97Uk9ewC5ZIJbIajyFqlfvcT4BaP0c6LaoN/tclzVium/lr\nEbyt\r\n=tOCX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE2fxzL3r6UbGJu81ZQc5k4DeYqdhOFwRAhorbWj2nLzAiBebZwEpm0lUzokPXfufXcLYevqT9TqxPCShK3XN/YAsA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.24_1572697910623_0.9156700425180477"},"_hasShrinkwrap":false},"0.10.5-alpha.25":{"name":"@react-ssr/core","version":"0.10.5-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"12ecf0bc7ca3cbe009cadcf8d5ee268c7bc9d554","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mlKYPv7ehDuwX76deVZdWXUw7+UMQXq9N4MWCxbhuGGRtXgGVGFvasV3ckeyLb8VIw8RS88fauiqXqDBTcLPeQ==","shasum":"45a292552a729f2ccf6190be5f8bbf1efd7f42e4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.25.tgz","fileCount":26,"unpackedSize":35621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYCrCRA9TVsSAnZWagAADqEP/2Z0zY6AtN/xstM5lWD0\nBRXUx3zOZkkzP2nUJIQkmI7kO2rzDfG01XB2bomA1R8f2ungFJyA3geOsOl6\nym2NefHMwjX79hLNbxTo++31Zpe9jdsVgnF5KSXU93ie0Tf/vInT4YniEwjN\nffL9jYmguK6cnU2CzM2MNjmXUTlsrJRophl2DTiHnNksSAIpzFPhG30s/FJy\nWerNoEK4mcMKjLJgrhO1vvSXsPShGaa16wEZ+0EidPcd+fJsk6nQWlcd7J1C\nglHiPDdgBgRKVbMX/0/aaGJD/Nad4BPTwyceXH8aobCpzcsvwxFahgySoUmP\nWnvxzbDcmnDOVFRt4yiuIjL9mKdm+KT7VvuKPUObpLG2wNHMNBRgkwVhiY/9\nPMdXhYeRWPMSZaD70yc/nxU5Dl5N9r1zkWydHDD8gfO7dMowAsvrXUsXdlKG\nBnpF1fEpSlexuuyzKDgJhXjwPn8nCvI/xdrYbsziPI0P5UR4fgYlU5kkGSuN\nXGtG1lwwWlr7naTFiR/G++IdoATYrGd47Z6S/n2X9JWRgKNt8o0UWr4eroAg\nAU5zCtFzltrJqt8FDPpXwhs1Ixw1wMg9wsysmDnJIHEVnTkBDSzKPFy3EU5G\nwnqz19VqcSjARdODJX7eyN5LjZ/EDm+ZTnJrKXy92OT7RLKfD3xuoah9RRmx\n/MmJ\r\n=pY3I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDFMtnWpfBhKyz6Jktjc1ZTWiSaMSIgYWw+6nJvvq7GyAiEAlFwXcGcv/XfSSz2whepZvI2tfnd3ameXDDWQehNFYro="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.25_1572700330945_0.9597389162663821"},"_hasShrinkwrap":false},"0.10.5-alpha.26":{"name":"@react-ssr/core","version":"0.10.5-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"837cfefbdf82efc62d164fa61f78452c00debb90","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3+y8DkdmCAk0zFoBaDijO9DTIMEmNcLlzXZ6JMWA/ehfi/GaMUgO9GBOXbCsGGY5f8oDGiAVu+lZ8cszagRopA==","shasum":"f645d01972f3170480d100752908148d6186145b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.26.tgz","fileCount":26,"unpackedSize":35868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYITCRA9TVsSAnZWagAAg4sQAIS/wqMUnIx4CPC8kAXY\nVLOHXGherdjhSB1h3Tpj+LLxrP5DiA2RAvlVa3UhDamfvh5iaDsWmbwStppT\nVw597AHaymdsi1c74oSWn5SpYq4CFC53MCE+v5TBX1LHDbnlMo+DKlRnGOml\n47Y9RnVceMBNDagFjAY4ClrqsW8udOMl0lfWiuToHo2KSKMFTP7osImq9TM/\nrML1xq1LiSMoPAlriTn1fVEdzgy16C7PuDhWpSmLgQSew1EKYVOJEP6hZ2dj\nlUC4rjQDd6s/UgyTMb7EYn+vQjBrTvhrsR4SAnJ3wxGv/8EJJ9TOupn9SrVI\n6g0AxGFbOOqNyvUGsaDdcY2gR27XvFH8y0OX2hottIhUf8iTUBLwOWkIGsWk\ngB7zrG5kFY0an5d3eyylyQmfvyj/FAWeNZg6JOleAYbOHDPhdHb38ep9/p8E\nhEVQ08q02d6ye/Ira1Lo2dejSGeNBP7/eLuoSWA47IJ2Icmjj6Ru5gwi1JEC\n2+pPufGZDKJ155etntLazaqqOp28EQrTxJKP1EMaBRHfeWtWtgLM2p5J1cSd\n7hvxf/eMCWYrGvBsSVewMd21HGL0Zvvgg92jT1BfEJjZg54EyNHbL/GcGahT\nUaAYWSp2IQ9QKz23L7/z4KX5t/464OOk3nAwI5bND0hK8mThYLI/iaHayp+J\nkLgY\r\n=LjHz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6TubRf1+Z4jl9e5WffyR4erEJvExGgFv3qSM6/rT3qAiEAv0KaCgqYPnPDAgCx5Ojbq4cMuuQSfDFRx1GQOyvKJjc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.26_1572700690885_0.4263053050958985"},"_hasShrinkwrap":false},"0.10.5-alpha.27":{"name":"@react-ssr/core","version":"0.10.5-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2c940fb430573b37bd3e306fe8f8ecf81b0269d0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-EDQOKLKAySjS59toExs7KBWaJQjR7xhBivgd6B37xF+txOTla5/mzHWpEkFdIuR2pDrpKd4a9SplCQVq9wj0HA==","shasum":"4aab83c02efbbcb7d717be5290ef95ea59469b5d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.27.tgz","fileCount":26,"unpackedSize":35822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYJ/CRA9TVsSAnZWagAADKIQAJzhIjVxxx2Q1F+HcbXB\nOf6FMtTXL0yxzae8bxeW1uKyPI5gmcQ6rp9rMmQEP+PgnujaQLSJZUCvAMj8\no+tQe+XlYx/gNCEEflidK7FRq8tQnAgxIOYKIGauhyU8eaqJ3faOugMdCVeQ\nEbTZ6cd4bnfAWVzufJZ0jR2d404Zg41/QRMwt+RhquI3OkRUicwpUqCfjGUj\nV14GX8NZA0x3cVS798oo7j1jX8+zed+Ok8GlFsoFHaFwrrQuIrO++wyXibGH\nHw9H5xYajswuUuaFBtvDSVLaI6R75XZMd3UoK50mRW8WAufZR/C2oCxA5J3v\nS8AadtAjJMd1Oh25uic4SdTCgabXUnDZDPHLgeHWgrtXD5pDQzxqqUwBIHqg\nNwgBpsTYFrJoSCsAHa/3cr09wrXxs2E7OJciASXZJ6PyxQPIwVlAzhhZnyEc\nK4KzDYFcbYESYITCweKApjmpKwX43ZEzhLMQpqss5S2IqZwewIUJzj2Q2qVd\n5QK1+7x3ZC/fOcbpuId8QoOxCTOtt5EobOoufuOabV3HMuqHpq0oDOY7bF5X\n8BjrXpsRWpJlM09vYLDn+5bdEQafBfsUH1vHCz92YnapEvbTwODCthnCciTf\nAa94FSD0KfWebZY7u3t/1+mBRzEm4pIsAiTPUQBAf1O3NeVVjwUN19uB3ROa\n4+n2\r\n=fs/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyVuHtV6bL6i6xV7/4rq8LAAYH3oMWoh8dkCsH1jBWPAIgevnk8O9cZcPrx4gBUaeQMhLYqPMF+3o+L57UJjShF00="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.27_1572700799120_0.291561386004878"},"_hasShrinkwrap":false},"0.10.5-alpha.28":{"name":"@react-ssr/core","version":"0.10.5-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"49ae53e4f57fcb7837d7aabce405bc44618925d3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-E3dUy0//mozR3SJPjqrywHAq0lp5/m8v312hEniS10XxuKDR/Sbc3bwYjoQdrIggYUvQgFg8JLVjkVMpXDsKhQ==","shasum":"640876acbea8932d0c90b990e4ca40b631cf1dff","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.28.tgz","fileCount":26,"unpackedSize":35858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYL5CRA9TVsSAnZWagAAbSYP/AzDqzT7WrcEbg3/8DHV\nO/qhW9N59EMv6Won9I2KnR7PxYS+TWeeMooFQ7rXatPvpl/oUhdT0/+rUbvc\nFuzHAPOmtBeGURXj84Rf/kprLXzY2Zn2rrUCbG/KAtbIxIzeOD1Vlp5F607s\nzcsip+G1l32oTnNfkpoUmb9JhRnn3ACuoI4K4qdl/dPoF1D4epQp7rgPk9M1\nMcp9bBONWyMAzqFtc3gXuIq2AvVw4vkZqABHl0qZIXsyaml8PxfaVienXAUs\nXzrRsOkiT+QlOFO84+FRQyvXPNQ+nNXXy80BUh1850FfUbxjuvOOIi+UVTPg\nHBVTSVJKQV7tgPLEnkDQj8BClFTklPUdk9gpkMYm0yYXhS5ZCb+27WpP381C\n0rp0ETOyNPHPVRlQDXhqV1YcHfDQGC5gLST5Jhe2vV2BOijve/uyxl0F/mBA\n/Llq7sKsO1sdrJyKC0LApZ/jf5h9QHaBOnWlCozDnekfO6zLStLA0amHfW7R\nwYmh+PldDMcBKfU0l7/Y7h5iCgbNy2DAh89Y7pMaAkqgB7cy3vRBFsLDZ++i\nLjroMBfGCp/5t8hBtp+86hgxBsls4mfk2/wyGQRLwCpWEJXsawMySnfB+s8N\ny+CpTfPoR0Aq3Q4KJ8pO/UP20ztrIKem9/elOpSD7uFZlF5XCiAZGwb5wPZi\nTsbI\r\n=BASM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlRFFFUsC5fKGAihQfKM7ZFm6vqvIgH562trnPW+HrCAiEA8ePHFXyIHYusXn+bzRziHLCJqTFRVo9ejsGMvOjB+24="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.28_1572700920768_0.8610233310745963"},"_hasShrinkwrap":false},"0.10.5-alpha.29":{"name":"@react-ssr/core","version":"0.10.5-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"36082b20665532879f182c2e433e6d7b7ce9f963","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SODRTBoWw3FidR/WS7tvcBiG+7OMODBzMvMk8rbk2xwDHNpJ7u3VhC8CXzc2xnoifz9ijSXAiZEwRi5mxq6POg==","shasum":"a9cca7011af79c571730fa4d5e23f3470168ee8f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.29.tgz","fileCount":26,"unpackedSize":36994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYadCRA9TVsSAnZWagAA3+MP/3auiwIHN/o/SPR5xKuE\nQQDgFGCAyp0crOQBQ4wb9yZzdYQhCW5Kqhm7BPPWIYCrTydJHzkNea4Wj/iY\n92bqKgaVeRUFG0e4BYne24tqOKXHVQcyDlHkprbgGbANP2xj+zQrE16BQQG2\n2tmAlgO2m+t3DiBT5r/u3iXjmkQJ/zuQ76qbHlOvkfLAZnepdPVsPSB+pbPc\nG1Y0OfGq0RUznKF6Bhe9+Iyhw1h0KG21Br7fWWL7t53MaNBkjGd7obCprpoj\nFCU+uZGmTcY/ExtbCQN/lQwSt5xZEycSi8Gj9ruWuI9lmXy/yVY0r0sPRTVH\n7erkbfEGAaoAYMYe7/LVmlkyr4DsTSs2SFgGmenF858ZYrxR+qZV0NP/oDnq\nzwNPA0EZJxmW4CAlesXEu4ME/BQ14aRG1zryHrRDnV6cG77t0RMNY6lIVI6b\nZw+Ao22TlH85mncg4dKi5Mn84q5xGNi1NgR9MrES2Z0DAEhB4hzVElw5HfXO\nLzSF1TkhQ57QEDdllVQ2etnhSoRU4xEWScMyV7d4kCrrPQ1MbyxB3N02ecgc\n1nPsvg1+nRteN/+WvFClktZg6ApO5PUPyvtSUWNFwT7s0BVBmF7DcWms7K8H\nFV5KczcbSVTKhLG6CaRAwY1QajSk5ExKkky6N00yrz9x8FMAz1YgT9/TWnv/\nssAy\r\n=F7UK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG3pEdUOkoGA/pxJz6Ke52JLTW0GxH9jWpecsz4uURbwIgA2zbzks+9edcvymWC60hKxbTTgyZSxyRoJ09fBRj6YM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.29_1572701853003_0.4996001471522069"},"_hasShrinkwrap":false},"0.10.5-alpha.30":{"name":"@react-ssr/core","version":"0.10.5-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3ef6c2e5535e17433d7495898de5b57e52d7efc8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-p3/kRY1UFNahCPU2B/No+TXO8s7B0mIF/Z9Hrku5vMwAARswCMtzeBJ8DkV1nbxUWqHj7AmzcVErkMjWnB0uzQ==","shasum":"ecf73a939139b281b147b8b20bef4f884261d4e8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.30.tgz","fileCount":26,"unpackedSize":37010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYdjCRA9TVsSAnZWagAAC4EP/RFzPSDyyWiR+lIDS69a\nlV6Pae30cmCdrdctRLKp7JL71pq/uIpOsX4gA1vkJiRXU6C/TidQ6+GCkfH5\n3bo7RWlAfzZKG2ntqo1ghNI44Dua60s0S6YtN+hX1pdZIl+ndagXFGJHbo0+\nzhukWmVFxYRqziqMMJZd3nJcKAL4Lg5TLUsN3cSkUP+nR+035GFZlNwOKIyA\n6a8MCzWng6F0Yk8zEJX9CpMrxKa9bn2bTVrg95+YT+6z9QwFJlIpGmVRk/KK\nNa+YxzjIPseAJguP+hD8RXKnFrtRuVA+zX9LN5EoZtx5Ug6eyjY8C1Y/4tuQ\njoEuNjBJW00mqsNwHaJuBh6m4cvqbyKeQ1pyuSCLvMzEnDzd1iRemHvRdI/K\n7GA4muZNvsMZyLoSwx71NtAU2yUCp1deZGm0PKehTqPetgpqzFyGdhKpboVH\nfFkyzZPPOWcw1wvS/QF2Q//GEvoZRWi8DBRJKmDDu4Wg02El6b76KWl8wBgR\nhAL6wgADHq2M2129LpE0qNU4DnrXpeWFSXolcKl5vRIrXZqK7ZFQYJr3ilej\nEchm2foV99DDNakkSR1BIRmzlkagGcM/Pzvx2Jgn3A3LOULYxo3PiHIaiCcm\nq/+d4fAfdsQUbFYF5vSWt5CI4pxZondUCPSaMTxnJfQuUwAGhlTMyCC6dlJw\nYdPV\r\n=y+jC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhtcDXI7IfH3EQwIVyPiMpTQ750D8cMNOLhVkYDE5xtAIhAL/VD4FHaaVKbbGgEZhWo7Qq3/pHerSTuNaKIJoJd7Bn"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.30_1572702050746_0.2630434720849337"},"_hasShrinkwrap":false},"0.10.5-alpha.31":{"name":"@react-ssr/core","version":"0.10.5-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"626b734a706717f7f98c71daa66f464a35d8c946","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Y+M7hBdKhpdf/ljbzMF6wjCGNUsGclI6vnFa4+0NXo6i6XJbko8iTDGnN7HWpgISovth0jbtiLM5cQ6zyGWFeA==","shasum":"dce1ef072d83cd1dd645a87278974fe4f2ee2a71","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.31.tgz","fileCount":26,"unpackedSize":37014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYf2CRA9TVsSAnZWagAA8+4P/1dMkO91vktXvdpiHGTY\nrtLMKSNEIPy7IDaYLccMqTw5qypWERN+wirMMfBfMbPqADoM+nD4FR35W9Jx\n8RTIiWrTa665IrDYhd7hMZ5jrOOrVAyIZLc0Ofg+XkMjuA8waiWZSkrrL67l\nQTAhKZd6hPQGs/1RiMcudIEPS2GanZAzgMGd0KW+y+rWpbPjvdjIpvinazxr\nQNzP7rBqD1TQUMiP76xKa2/8poum/dFG8sxVTuLZ0X7IjtWPzLQnfvebqaeg\nJFJD3YWvFsqgeNfssVQHh16NGuGzGucaEZKKd9sXrwitdFQ1Mnt1RIMCStlO\ngnVMZbt1dUp0xNiDD2jwW3sQIczgQUIqzJ2jcBDLVq95XrDR0tV3gphPBkh4\n3NIQPNfi9gdMjprpsChGyW9EEvBCoy/3sZjznL79DpHcra8IRRBs8nxBrnGH\nO2yTMA4ZAuw+jQ6A2sSK10bIMfpAoYj/v1i86vCqCSjN5724zAVwTZLKnw85\nXRkOecYEbQ0cbK/tDuJp/oYqnbHpJWWpK/v3Q4gP9J8SJXLcKuj3a833k4/4\nPx9TrmlrEdkXFDhDwz95LQrfk/xkRhUervm69rAph3cnu7I7oF6+k/AG2B6I\ntKG+4RPfzRIWf/6yjKmX4+XvdB757mb9U3MXr9HoL0KbfQL2+dofe8spi3m5\nf0a/\r\n=AgJC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFohsLNhlP4osY6fF7WpuxvlQMwXoJ2HDYyypFJ3k77QAiB5Ehyfn/juIrVuyhdJ/z82N+AWt/8XeuMlhpyKf1or+w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.31_1572702197474_0.14157335413290006"},"_hasShrinkwrap":false},"0.10.5-alpha.32":{"name":"@react-ssr/core","version":"0.10.5-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d088e097be89e8d4c8b0b03d8571c53d98738e4e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-MYm5y+aSUvvmFXXoswZ5KYPpF327oj7wnRsoIIAOBIJ0F+/aA1TyhqA3Gf7Hmy4VVsm0WrliN1/9cz0TPvwL1g==","shasum":"676fcc625faae42fe501c26b1d2b19de96314e29","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.32.tgz","fileCount":26,"unpackedSize":37043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYioCRA9TVsSAnZWagAAytkP/jtdrLtkiW3tkXSwaQcm\nDuI6jneUBc2/q0awlQpoEobdrZ/wuaB1MDp5G87PI7qCT4AO4eO5G/uK68Qu\n9xxQt83t4QwOxGUJP/XOAVanMQ/HDUIZ/18gQm4w3aomEJ45xbziyvvgrA8G\nN+2RYWyBcfwExfKBZgSo025LhlB2d/13MKvvbHmzSSOjr2k+oZ8P9vWl6axb\nG7CI1iBRBpIhR2QcMcmOQNUoQiiG15n4FLgtv0ZXT3tNp7fURAbtv91jezDc\nbqicUsosXHUj62cTwrheuSIiJUA1Tm5RdaG9Ns19hFSytVNYksPanSGUNpya\ntM1KG7pREMHh3tQKHBBnuXm7uSdObE9OrzACAFOTZpTax+q1ycvt1LgVPfsn\nh4gHtY6DgVWY1CVyM+TRJElrGKFztEkVe++2s2cI2L9ek2HqoWVTWqmUcpXV\nR1jyDKRcxhBABuBFN+L9YtKEiGq84QFciywBOpKEyl5irrlROO6VAtjGG6LJ\nLdT89Mj9ojGzGua52bF43INEF6w/MMrzwpSyYMJFn0QHOaB2uy6o43H3BWKL\nzmUNaYtOKmaFCV+QUFv7dRwfGeKzkAV8kcYY/+71bhubK3sMZUxt+eb1C1m+\n/HTA0Wi2uEL77wmlj1DX7jIorPDdavYR+TamlaX/fEIXuvauegVTNjM+LdSR\nIt3l\r\n=21TP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCz4vUAL8/zy1eRi1SWPrxZmZwSvXlwl2PghIE+G9cSrAIgLvc5KhMCRUDgofoQpoL/dY3XfUSwKWB11blsMja7QM0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.32_1572702376268_0.13223045786635312"},"_hasShrinkwrap":false},"0.10.5-alpha.33":{"name":"@react-ssr/core","version":"0.10.5-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5a4e40c95c3b0c0a5e90af66444d47dc71b570ad","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ZVYRLpivsMa5yKD5g5gL6/eYQmkbufMFZ7BCW85VMpjRv7xJX6g1a4cx/h0nSSJjYrig/QiptOlH0Wppm4dIZg==","shasum":"37b752e12d69f6676187d0be79e3b2099d19ed6a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.33.tgz","fileCount":26,"unpackedSize":37267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYmWCRA9TVsSAnZWagAANHYP/jiKb0d5crXiMIA/jZ4u\nRcOkpLgdRFo5QunHmQBE9LvbtiE5xEVHCC+5cSw314wSDvtTvpJrjDuBI09T\niBt8mujykH9ukZNq3Ilh+TU/YFuURvrDvYQMxHvtrHVdjKgApXJpfN/4IcOh\nHoGabwFFsfUeKhcBpy/wBXBWXp/GPAVtN3C3e5NogquPSBv8NVzPQCiREeyH\nmKJO8m+N2gzQY4Arp8nYY0tofblb9o+vPqywAoSVy6udOtwZ1EtaNKmDRT6y\nsD9zphEaKgqd6Ghp8MEaLr0Nu0pE4xG2U09dt6Erhgq03J9KkMVYZnYGG6md\nyo2qHr5OvVFTpOvLAmYXWa8CnZ57kzjj6gjUPdP7e5CNABENyRof3ILPi9rE\noAWQE8wFc/Ie/U4Hrjfd7G8hDfQ/pbdZKlnrTJUfD7FWJCvvrDmtfZsbcUVQ\n5Qm35U2Qeowy9jtONy7CseSO6MaSy0BBomxbyLv4HeSQVcIQSowamHsWarMh\n33slLrauk0cFmpbfFYez236l2MSlkYYvgnXPfqESO+xjyfVXkDbkbn/tIM+y\nDw3STxndu7/Z0mVEIzf43UTxwMYsFCLmggxbMamCusZjjhzTnQO8RKz8L6+k\nahomySNmdA2wbvYImig/xrMuNS6fpU46bX0kuHgb4WfiAHuo3zN8TDVe4hky\n+1pE\r\n=Xbmk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbzai5JVRbwYs1b6hxa2sIXQCBNEO12PrFXpEqrRFmyAIhAK3A3ABWLcZ7ma2YI1yxosBAinVOnGHJeWbWexjR7eUp"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.33_1572702613566_0.8678651782870201"},"_hasShrinkwrap":false},"0.10.5-alpha.34":{"name":"@react-ssr/core","version":"0.10.5-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2d6ef776b24c9bd322d04fe65ee608257d4e0cb8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ILYd/PX1lafsxiEE1HelzDjAooMVlcw5kNaUXa2iHXletwftd/Bw9lwqGV+8YTMoCm+GNwVkK3Bxf+qOVdV0gg==","shasum":"9b2b3742839bb9a5e0729833f9a03fac6b860bd2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.34.tgz","fileCount":26,"unpackedSize":36106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYoaCRA9TVsSAnZWagAAt1QP/2NPAwCD66vf15Obs4on\np/BKjK0vb2oIScJ7L2Jn7wr1tCC5Xe17KQXsnbqnpEzCrqCPkzDcBmgnSh+l\nGlL8FXTxv19zxVv/Hi1iPWOfIYepZ3in1oajXb1c6WyeCpeEz3q9XPpMie4z\nKITPwXeR+G0F0j2e1RPJk4Dqlua4lkx1lpf/s0N05XFNWNfzQR1T/oBr/TUg\nFaiCOu/qaSzCQ4PoIocaS0uEMzvseVwm/IJd9vfosdRWBSyYnEPehggb9rhH\nCjh5sN8QXdSPVBiM1d9koQiqxljcdMMQpLsyLBGA2mKz4W99GdSeZaA1eqF8\nraoxevvXkZC1XbkZS4ClxYYfy+XfrLIfJY/L9vgb2xIjebjBL6su/6/mw1GS\nDvTubaVLGZU35XbWgy6xO9tEpqEzIpOJKUJPZXAnIQcBkxBaj/4IGIHNRie9\npMtaGbfR3KUD9o19ZH51J2cCcKDbakPb1EQUBiBoZRjlBOuDKWnhSj896gdS\nGdgR3xUgBX0HKqdipVbOYOXPT/1C2tAogmD+rNiVitKJC//Gks1RQT4iIaEP\n0zYwgZl+48JV0r5txL9W7TH9Vgf0/PxW0zf1VdUo7+BpsPKgY1h5xcxJhu4N\nhP5QHEGAm4jgRnumw1+1dwixHHbkekEyUSkdXlx1zCC82SULONGmUkayc+/o\nCtTh\r\n=vIi/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELkl5+GFGdPRV+N1y6yhXbDaefVGcpeaUfICp3J/0+uAiAvYin5NPgbqEpJmyt8yuQy68+gaeYz2YOOnch9eDJ+WA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.34_1572702746198_0.7290451065756327"},"_hasShrinkwrap":false},"0.10.5-alpha.35":{"name":"@react-ssr/core","version":"0.10.5-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a16320839fc2a20aeecf1cf851d7c33aebd7b8f6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ipU2BB9zsUgsReqCHnP2yMkb6FWrDf4ygebCwXTMCsjQAbAxg9utzsGkqpQ5WUZQ1n29TaYgd09CYH98Lqajsg==","shasum":"3b6772ecab3e4355d30d930fa54a1afb9f9028ad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.35.tgz","fileCount":26,"unpackedSize":36939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYvbCRA9TVsSAnZWagAAEbsQAJVMFZ4VbMUCXqEaRUJi\nOyilfLx0iFfmcO5vfKjp2C1P0OtuqNQ9JxFpk96CJZ9ArSrgKt+m/tbHLHxd\n5lcZmHPlY34DEW7V5bjhkGP5LcMVg45wIr/DupNpX8kiZVb4ryzHJbp02NFb\nnWVHkITRBGZvdJ/EWG22Z4If0KhBtEv30Gtk6at9ExbLL0AqI6e+vDHOgK3O\nIgfHvUPKoEKCALWfJWxJJJDNFZzWdpuXmFge2bHNHe3uk8dLAMIazxWL07qi\nGht1IWBmBc7+BWsWALQoxw/EU8KeYA/ioyhOqVbZoEafl/bUkwLLJcOfZYwx\nY+7S4yz17RUqjKDPml6XO0CgpEO1gR8eVvZby2xdeta8F2c8YN84hlrZB4WC\nuOpegVxmzNYNzJ9QeTm5TaWZjhSzjbN4OE3soP96PqHqZE108e2aQlF/Wr4m\nInGhe2+xAdKCHRamInyKHm2UmRzOzlpKQhsGtxoUeFFW/CqcJ7TJuMo19HyS\nxyPcBv6ntbz2jpKzInCbqAg6s9A4P9c1ybFt5+ReeqE7EjpXu/KQPhu5oP/Z\nvPSoMLbpJfI/LK4L7JQ6LjXBbqNuIyoWkNqbJWNxB2210Br3ePY9HX/heiU2\nOvlluR+npGoEMmFYNwkqix5uvtTWku1ceTbiHS+AgP3QoJWNdkxv/CORiRCM\nCoQg\r\n=DN+7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBehKJvFkGBb1+PAxw4plQ40KRn26fH2KRShywShNjvAiEAwFTAINJ/TCfdyEl+4HaHENouMJpIkxeL/WWW07hDKQQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.35_1572703194932_0.459905769851926"},"_hasShrinkwrap":false},"0.10.5-alpha.36":{"name":"@react-ssr/core","version":"0.10.5-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"fd4e7a09948107c550e07d76e1b8cb8d8fad01ce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-O/l+GzViRBCCC2knrjjSJ2CvJxIX9HzIvfcnhzyl8HC8HkJsFTW9nyInCm0hB0U68zYGx7ANXQITVhP247Yimg==","shasum":"62534d7a450ca51dc3d03b92ce9def0e0d9e0afc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.36.tgz","fileCount":26,"unpackedSize":37055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYx8CRA9TVsSAnZWagAAKFcP/R8I4PmpETv9kjd15zfs\n/H1GoMaS3pEdR3FbOXJNQanjjHLaalwdF6YR8LnxZSqVLhFk4NQ+XeR8pbcW\n1IG55AdTlSoqZYl7TJZmmYEMm/AxfWRl00jpoYRiy57qjJlCDQ86iI+IIbv4\n6M3U+Jh8/HMBGJoJkif14G2G2aHgM4Z1LRbAF3BFI1oUd1bbM1a4Er5sDKty\noQdOycVsg+gtKJSU8QD6kdXPDjXQp7x1lcfWm6cSH2UTGGInbXGABL1/eJTo\nph+r4Cu1+rY89Quq0kM2CnHPwxUK1vwQ5v6VIhhfu5dmric0ThX3LJgaUDug\nQgqC0Q8evWknS3SWQIbth/A/Hv6T5ixPhwZFJIMaDOOzzIDkjmIim5ut0VYN\nXohzRDJTx565B4XEaFOEIxjHe71XI3/3YLqirm9Ai+ERXfunj+t2LWQF0bhJ\nHHJBJm7F7oIH55Z2DV7Cs3NkalsR4RfVcEkuV/mtihGglR/PlkGG1NEvNe/a\n8l/jKPLmmD4PWyxYFVMieoV8uKhimEo4uqBB2hTzU8ynaEJ/GqpGpS/gO2Ji\nTyg16fjCo2CEZtPGE9YS8GWfhyVhhVyvZJsJHDsFmEm6GnV9WT6fJ0YreTpC\ngN4MF4zIlBYQE+IEoUU3e4lGj2zpg/zdxil026b2LJln7GVXFxp/BdicSQbS\n/s/L\r\n=sdyx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc1AGAkauGHbkkB51WaDJZaaBhTmzisoXGtjDYp22E4AIhAO8p/BAGlzWcDsRgTcjwXtYnRywGeVLIHPO7F/OSpj8K"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.36_1572703355601_0.024666282056670985"},"_hasShrinkwrap":false},"0.10.5-alpha.37":{"name":"@react-ssr/core","version":"0.10.5-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a2440929d0b1b61a762df6d43b25c674d18d1df1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-68v8Y3rkG1UCHEeXxHf36O8eR0Zr6BjFgmh7KATbtKRXp1TFj8e8I6nAVxAN0ihVt0Asc2CwZKOeEzIy5Dz4ng==","shasum":"c09226069b45ec1ee96615bfc14a6c0407d4e342","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.37.tgz","fileCount":26,"unpackedSize":37013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvYz3CRA9TVsSAnZWagAATkUQAJtoyC4DLN8rc4a20SZ4\nphDMHphusxzpADxf/FId9RS/wONcsPDgSXgw9ekhdriddcAh07LhDgeWeMVy\n/5wnglAcXVr4vTTB2A4aiyP4DYIh6O6n8hr+ZWAtlyQvkWOKpMzwFkA/VS1x\nQIxgMvHv4/ZWZuRSvV4DFXukb4XQsFTSdyfuf83lIacjfkiI8hiZVma69J8H\nVhEX8gGxro9e6J0Jqf6cdntZHmsbEmge2hQbEHGvjMw84IRscNeyCB29BhXs\nvw/FGl2LJbFDodOgQxn6+nlxI2NN+ySbC6JenxHIgwCn+XjEMCodVqqIlJfu\nqmXxipOYkLS9+lIWKcVtm3RtxjM0f6fyKPcQ33iZTm6cNjC/8XuQI1jmwfyL\ngSKzfgI2FachaZX6Q031hxEnbOvbPcficKhimT8QI2s5V12jQNbu6OJCJYB1\n2CY6Gyi6eUqQlAmaJBJzzHLPcB/NTGb+PO+TBrH/ugogIjFFQObhObSM4fwq\nUsnew+EoU47qwltYoHNUy7i8k8fT3rJDbGmEVvVxRFuDzSjZHyEfoWsp9um7\nBTB4KAe5LDAhgL9jDt3rygnP7CaPOv+VSkyrhhg15UwRBfUXu+aBXJXdHYBG\n/v5blCn3gYtkarNY8wd9XXAqKSIvwNUW5l7vXPvO4tUD4kJ7GaWPBnhFoCh9\nJH7Q\r\n=PsFP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDE70Gj8LVfBmimTIlTbn6OqHHUdQFdT6VlzQm9m1Ll7wIhAJqdzhE7WeGzyHF7XBqTISo8ZoEjWDsPPhd4qRPC2ooB"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.37_1572703479370_0.5452247735402178"},"_hasShrinkwrap":false},"0.10.5-alpha.38":{"name":"@react-ssr/core","version":"0.10.5-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8a388987c26742ca669d2b32d2daf9bb6ff931ef","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-H3Ew6XWK7rQl6Xj1t3w9fA3w4qOymzoHsxfu0nv81ikoJelMGG+/ocpfkJ1ws6akHXd9BfvP5+KFiz2irteQyA==","shasum":"19721c28383c4593f873c2d7c69e01228c5a4cb9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.38.tgz","fileCount":26,"unpackedSize":37016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvY8gCRA9TVsSAnZWagAAoQQP/j/aAvvMOlCZiXdp9JZ9\n2vGGCNWj7tjgVj5U4Xmm4cn4WtfH85HpJVkn/u5/MdxEiWwmG3DN347ImLEw\nEPgNTQVzKFW1rYgGKN+4TRhALmNc4RCSIrfVWCBmUB/u9rv6PKi5ZPapDS01\ncTFjR+c1zccSK/QHVi7HBEYlBqu/G2apN/0m3l0V6q9EY9mfEXA2reRsHk/h\n01VedYRVA2UT2Jh9kIpaMIKuipMY+8ifGhO6M3UnFYiRlabHmADynBRNxw5G\ngMeut/g9HjFNLDTLcHtnC5o083cFEkg+xK9AQZP49/eUox8YEvK7KB7C6Xfp\nnksgxGqSVe1knSr0Zu0VngV/P0ckpaReOkIwPr11etGWF/78fnc7eh4A9tbu\naxHQmysRxsA/zWIADEVI3KdoFly38pkAGXXZvk8VfkPfm9oQmEBawXzVdbvm\nirUQv1IhynvPxHkOH1ak7YeKL6NOXrXjnMKd6Y1S/vj7YfJuoYo4mVkrkYnh\nd+OBM1SPteZCWFIZ/8TxjxlssUXgrBeIKFfGc+K2lTUtIqgM3HF217SzAmAY\n7FSBd3RptROmqEar7Nbz0ih8+lVFrDlhJh94Qor8acAAUyH0enfnYm4iWO0q\nG3yN4PPkxYyHby/iAPmLBIXkUcJIVTYTRo/GMQLjru5fD/Nc3BXfb/e205on\nfxbT\r\n=i5tr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMCb9icbedJGm9aIjoJ3COjX1KVyOqqHJtrR79EgVCxwIhANn28iGsfkQORsBUdsRbxFOdJpHYzaCQXkKACKo5hVwQ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.38_1572704032079_0.42614308798774925"},"_hasShrinkwrap":false},"0.10.5-alpha.39":{"name":"@react-ssr/core","version":"0.10.5-alpha.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"feefc92ed4564c406fabd168e97376ad54f34c48","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.39","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DAe6h3KS075QwQISCahYSvcBiaurlzBW7QPqg79ZXz/p9bNxN0aogKJjSD4XxzCDtLSCFio1MJRG7kUIwxRtBw==","shasum":"0d80026eebf0d678f654ff7969946ad9d7c96d45","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.39.tgz","fileCount":26,"unpackedSize":39339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZiPCRA9TVsSAnZWagAA3nAP/A1jo/R0Bh2PbhZfETDM\nwaITcspwPHlXY3C16rqhxujWHVwe2hr2D+2gBl661zooVZMLWIDp1GehQdj3\njgQJgqk/uVNVvDoZ7zJpo6MoUaZJPWf19+5JEU6tV2hgQqD2fXGvi6OwEJ5k\noJ4/n75lqoYnVGoU9vbHHj9ehooohCvv/nuZislchN7IXhlCFWrnRA33IXpY\nLmuh3G7uQbmPYGlZBcTLzBNsz5lVfkCJYwVK8o/f3lTo6yMZJa0aq1t0gl79\n3f7kqD9Wd7QJ5O0U4ssQ+mvuAwHiwF4RTdzPaSinTXeaNOJ1XEp9ExzoLiGb\nv/9JP2ONFfyUGftMERpyhxMYgdThuwiaVwA7ugtOk8EkJK5L2hf/m8FfCDSf\npt1nSvN/sehDmmINuF39ZY11ZD/bd1+NGHwZP91bLSQxiXsJ/WGI2bU/KQHG\n6/aY1W12o+N9/uOFRjoF3bz6BsE2ov5/GrGTPdslrt2ZpwjdvEVaqyiv2a5f\n/b5SgxDNaM5rQucYqNNPgbe9COrXX5AkB/mBZsnKX5cdy8zZkilYP1TrjxNs\ncSgO8lcZVqJJYTCmSEq6Go5TfMgxf8ES+qaFGrvZr5ASH9iRb5UWN1YWH6Ih\nioUlRSO9lheL5GO8W/V3LbBWjKxjhpHNhnak1PNXFozRqWkUHSaxtR7+8SUD\n7ZxB\r\n=XQlY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbnYdiRvFH1fWgAQpNr0vRivJoZFlTMpAwVlYmVvUl1AiBIC5GMRor746Ljar9l2n6Z7TBqSMtyhSdnGSZoBMvXEA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.39_1572706446887_0.3042997427744696"},"_hasShrinkwrap":false},"0.10.5-alpha.41":{"name":"@react-ssr/core","version":"0.10.5-alpha.41","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1ec76ec0e6e1d17ebdc90ef204f4167549e3feb7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.41","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CUjV6WK4Rv/4VCHpOSsNgjHcxTd4d7o27kgkIqU33gMBCBP2yxoEP/yOLI8Vaimkn8WaKX4FH9JPvCW0kQFllw==","shasum":"fb3a433a20facef6fd643ddcc69dacfe160fdf2f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.41.tgz","fileCount":26,"unpackedSize":39361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZkBCRA9TVsSAnZWagAA1pEP+wTQthiUykWTnya42L8r\neGXzEI460Uju/LbBQI2SHYJi+Y59mBQaM8RYK309UoJkdwsvwxrHTqBEU8qn\nfmTJ164Fyn/4hq88128u8TESFEd+N8jno4QZdl+j9q2h9abRQv1K4YbQIPiB\n4ZMnohHU1bJV1h81CDkto0cXAmrr8KmpEx6LK5Cdvg2ReVXTkw1SoFm+dWFL\nZqr3+CAZnSHc6WybPsFCpkoi4e2uKxYI8simxibzfcHukV5OUaqjbonYUUJS\nW/WI7nJL3lODgUlM1M7DDSnNB1SlD62gIli8TVqwMo45WgJETeji0sAOK76Y\nt1emNdrUIshiB0VqagQUcZIBDLafMi9s96KArzzHI58XYdnoG3dDBQNnW2nw\nqbKrXf67xxSpaUAsnriwuMng26rszGdosUZyGjzXSzrVqYIxnX/1Tyyp7Vyl\nKQaaeK3kf0RnZXVypdyumTfS11zTpYYgRYvm7ErKKlrHHmBJXxTMit7dIep/\n86ysycEEWTx945Cm3p9nytZr2QXqc2nefl3EPkLipc2ceu1oYep0XNh9S6u7\naGG5qnaBOv1tzTF2mR30vfZfq0iFyrfQ2uahJix82BuncxXnZ6tSv4a4dekA\n5FI0Y6WuDSEzglBEgQ4ktKDtM0rmpIK26bBVau5bBUNPFvL/xM4fs8LICuUP\nGt4h\r\n=Lb6i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBxm4tQDk6FGOc8Uvw5qeq4pihlY5bWuOHpn0Q7hAGvqAiEAhX5B7LobMuswHGWcxdWt0cieHg0r7FGXCRIr85IgpnQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.41_1572706561208_0.37593006196365253"},"_hasShrinkwrap":false},"0.10.5-alpha.43":{"name":"@react-ssr/core","version":"0.10.5-alpha.43","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"be260e92d50ece39eeed6f971c75a57252739879","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.43","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Rgv7ADcDR5tIN4k6mis8e0pY/Ky4R3I2qBsWhfRrSWQR+eSK/dNijyCa/L9vK1Dy27JXOMqrz317ohbh4ogmcQ==","shasum":"b8b723445ee4177696e572cf5dfe2c122485ab36","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.43.tgz","fileCount":26,"unpackedSize":40943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZsvCRA9TVsSAnZWagAA168P/0iopuM+TxDWOCk8XwrE\nXxynnoF7BTv1xu6408umWpbVYteIjQEitd5WHtt1TEmnYyBRDLqBDqAD/wqs\nHq7qBT3BmXCIQN4IH/4/iwDlyRCjs8UWnuXbQQPKDGKYpVHY5bfB9tp08wUq\n3HxtF6EhBc6EucUztK9R5Oackz8/3FD45m1270L258usOYCNi1YZEpBd+GTT\nOFsbbDeieQDE63e16q2WPXQj2L4hjDjq5106SDpnNJa2CTrFWScAZpNHWtMm\n8ygTieunn3ZN1aIPaY5AumHVnVCz7k/dxFNmbAUPKM3OiDoBIgLEPAH4ywba\nfQnG9xjgnWQkKEY67kBurlfTcjGG9gpDQpUHcX8tVAVxEzCJtLyOcqANEvZU\nebsGFHcejN3Bl/bJIUP3jSotlyXsNRwIFrBFlk5sm4v2id5NRcyvXaQ+gSk8\nq2LM73Ph1j1Bf4cjxsB5GPlP1kXHrMOsK0CNr4XNsoc+OqzUppM4vpVJzRGT\nATfhNdMx1vpfUcpbjGpTCac34xW6p9uNi9gQYUsJgJNSmmYIDf7fwBxGkZx7\n1/NdOEvcEyXijatu+5SBKuwLLm7qd9QAIoZQ9FGnGTALhr/TSPPeEnRanUmL\nnHHFKWiogfgeYOR1Tn8vckgd9X1zb/QbWnbwoVGgSG40o/1muThzuguMYWWr\nEi3L\r\n=ED4o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB4TlDsjxKpcZTcWbw9P1l2R24p/AXcvyw710qnqofhbAiBXaIaJGsWXASH/KSUDRu39dUezQMoYpW0Yt0Eu5sCXSA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.43_1572707118613_0.7956445254042539"},"_hasShrinkwrap":false},"0.10.5-alpha.44":{"name":"@react-ssr/core","version":"0.10.5-alpha.44","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"fe3546cb934f5da9d0e61fe67b59343f0cb52912","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.44","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-eK2mkuJ51vwHtlblsJcpzKxCyW2geAtLyCiBiSMkg6MkS41gKXXpgUc9Bn3IBiREOqmF6C4OdzWytYAjAvNiPg==","shasum":"bf4ca8dd26660099a2bf07ab87e14388202300f1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.44.tgz","fileCount":26,"unpackedSize":41071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZyzCRA9TVsSAnZWagAAwZQP+wTeMUpH0XmBiseW4Wed\nqKahD+MERLa25CUjQMeGyFzuAk99BZJbtZol0DGSkMoTonDofeChkKwjMx5j\nA+mNV+x/19cx9JHLR9L2LAmRnbNIPOZM9COuqYK8IykoTfNfVGdlRQ3W5tw1\nZei041H2+qRJ/d0WJcPV8kGwEn5OWGaCLlqP5zw51110J8+XSY0AZcBZEpcJ\nstyitT6eS6QMMZw6ZeIqDPHbd+buILU2Ousk7dwr6ZdtULZ1ovm6866Kzn6k\nG8bJlKxTkHjtUZECoUTxe7NQLrWWqD2ScLInFjemdUXy41KbXJ2UCwSpziw2\nlaTLSmLFHcKnPJqXpNQGq64d+WyZFDDyex+jI3MQLsqUpT6Ts9TTwF1Tvn2/\ne4oEpdDy4bGsvCQeP6Xppy4qZqDhmftLIEpYAigJ+BpyVN4vjr70ttrsVdgr\nLoX+YM/oKUAYDW3vgGh2uGKodIikSrfGg1Gu67vxl6srDjM+pxAjy59stA63\ne9rftNFROh7Q2hRbWOed0Wmet76srheYI0lQXOaZhOVQvJ9MkTOC2sMmAov3\nSdeHhg/ZnjxESFjMy14THHgm8976rzfZUU3XuhXhdO0aIwXe8BNIYiF27rKX\nyrvjM0K7ZI7FxVFPdZuZ2DIBewPUQdVIZguescE1j/fqBtto8QRCXwGVctj1\nnXJJ\r\n=EDcL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXjfNP+EeDwbE8OtQPPJR6lAFlbfhmrkv/gmL/9p+WfAiEAuxw9DDm7QztFiaQvnG44nPMZbL45yIfFEa/4wsj+o0o="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.44_1572707506780_0.19731656369050654"},"_hasShrinkwrap":false},"0.10.5-alpha.45":{"name":"@react-ssr/core","version":"0.10.5-alpha.45","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a45099de693db5833ee3d5b15c0b3c6ce9377dce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.45","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bSRxoaWokqZJBe1at8ID6kW1mZOFWowj8aWUv8uXzWgoK8o/PhUqw5zgGWmsaSRG4GiwUrCxPEpHXW649v+C4w==","shasum":"e42fcf8b03cf48f3e166e7bc8b94d0be234fcf93","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.45.tgz","fileCount":26,"unpackedSize":41086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZ2bCRA9TVsSAnZWagAAF7UP+wemnh6qlKz/kKPHJB+a\nVZ0PYaPK+mBRtLUncno6h79JEZq7qH9BNJ5dObRg3N0Jfa4PzyI1ww36JGKE\n3z7n3oOzMaEK9Eg/NUFBPt7Ap4Nf08tEzGqvi6Kjxx6CdlLQBaIXy5zZ33GM\nqcqL9dKu+pvNVcm4M0UkeaRuCRRqyuure7/4xoySMhVor1TNjsIQ97lO5uar\nG+ytiR7nI0WQdbvNDVHhX7mSlCRtvfG9v+csLU7j9pyXae+b3W/3PYSCH8kF\naWlY+yBu/lVLbB0GvND4J4CfR2AowFmh2shopTOtTFL5kPti5TDuG/Nj/ja8\nsuAB/hGMuG0CgzvCAi0aCBBBTeDSa7vhRv0Eb3ozg27SLlcV3fjghMnTWsjm\nSLcWTqK2Acv4mgzZ6V4knXpZDftbRypUHomPeqUeCEyf3XTKxq8po3OUmsTB\n/5alKTWVccRLrXaSxKV/t2O+nkmPZIjf+Y/aYAFRHMOD7fAYPLouuwTasU0N\nSHYtUUdXvcekbjlQwEZbKlWuYb+d4IhO7yVeDhN45W2e15FBf7CGDZiZQ9HX\nai9EZwbys26HXxt76We6woFVmVHSwli68LGvi67tkuyGuvd9O5iu22iaqFuQ\ngTq0dhEdYNNyJMXEsIIYjZuFecacJwwmZIldRXGfT8EvgXp7PK7E/JKS0tah\nrVfR\r\n=RPdf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZIAuWEsFW1wQGDMibHGNqTG6G5+sQBxj4yjWC6ctkZAiEAs985LKjrvhVHK9VUjEpWtGr2HIdxX0e9+1hJq3Kw2tY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.45_1572707738586_0.4289871126797493"},"_hasShrinkwrap":false},"0.10.5-alpha.46":{"name":"@react-ssr/core","version":"0.10.5-alpha.46","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"527d87e1ae97ea480db3c5269fdac2a17dc420bc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.46","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Si5F2yG95GySrPwnABo45++eEL5HnaICxRqR1uk0gDTzzLg+CGZAXFagg/SsLhKGxA5BeqPIErraManP2eyIRA==","shasum":"c9d8735bd831982ce2a1e7d3994a1b988ec37c63","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.46.tgz","fileCount":26,"unpackedSize":41074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZ4xCRA9TVsSAnZWagAAepUP/A+1rz3wmZHkxY6WMJAo\nRxCtMr8KUBJ22kd/+/9kRZm6G5Xj5ejSdcNAvagW8Ma7U0oCWXgOAYV1Gbgw\ndXP0I1yPQvKUzPeJLPIdlVFJbTORhtMsOv/NvMCOfVrWsmgyPo6omOkDOfj5\nZQlWgfS2TBNkhy+f0sL3tMljarfzsO0sh4CzmEcUyWIlE2c3xRyrVl7izoGQ\nL136pCqGgUc5m2oYqQT0E5Z16JJ7X4xgaeAiEtzoitM11GFqYr/3o18y3Htz\nKvoIKk8oa2pw7qcy05KxX6VYFyGw4a52S1ANl9sBUEPQoCl5Z4TzfbcUVuRz\n1fvhPVsaAPdLhr5D2QhCqvNgOmmjdOO6E9CuvrJv5lo7RG4wRaGZ5nK6BsR0\n2iev50Mq+5WFql/rtzEd//J/n1+hC8ftXET8VqdNLrQo8xhl1dp5DAlzSSmr\nQuMG4bL8m/KD1e513nXK1ZgMjvtY7pSzbMG9zn7KJg3OCKl/ZouUSR9gJuiI\nRJVkVaypEGcOWZcaG9YM2Xq78ifaIEkg+S7hMKuEGCBnHNLeXo39ThhfzF0D\nrXq97HhzHsdsqyiZv94pSg1ocMCRRrKuydNZgd6TPoIt2WOcFaC8NkGoYrc6\nSTO8Ps6/Mn7d8mObGD/5vwAeh+nCLJ80z0fZ9BVoPGnuFqg2TC2r8E76quCo\nuFsM\r\n=hOp+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgv05o4T3Ddg1gp+mKfeZEMfvF+tJFNwcKdiKefIkofAIgFS4AunrRklMhV0lciXJMidOBeRtFgwQkFleGNQ6pQSg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.46_1572707889231_0.1644103455482293"},"_hasShrinkwrap":false},"0.10.5-alpha.47":{"name":"@react-ssr/core","version":"0.10.5-alpha.47","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3a6dc97ff470db13c2f66b770fff297e089ce5aa","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.47","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BQH0DaRvNeXijEsyo1TAPe7HzacGuNXMCU/iItVW5Mul7ENIwB6aBu4XxXSXXMSv8lo8yElgvTe/EyZyCK+uUQ==","shasum":"2de56cfae4eba92d4a4df59db8a95574fc431760","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.47.tgz","fileCount":26,"unpackedSize":41240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZ8YCRA9TVsSAnZWagAAFbkP/iJzg3WZOYPY775ZWMc2\nH4tLQvXNgsxqkcBhTcki50UceVQgiqdbarAW7G20SCtZPja1HFu9IdioeO+O\nJjq77FXXlMPhSDLIl1w264pvOGY4q1Xne+cALRooFsGKBv8jJ0stGUwyLs3I\nBJggOI/H80jqcnmFiweBYAZD2ZWcBsX+G71hmrz8/IecqeAz4xMSgxV9y/hL\nDhkzZS0ydGIvNSBtc43fM8IP/WCMNkDAXQvFcHuFPJTgy5Tn9uIkRkMLYjEu\nmhX6iOCdqYoc1FtORIL8AW2X7sWzHb9an/jj/fD0ZJdum78nMd+Pq/YGmznn\niTeybl47W9mZQ0t/N/O9i0yk0+DoLbIIhYBlG0Qiyk+uHoYtFGEpXBxEqiCS\n1Kz+hJdngb2nSBjSmHBT8pBH8p1i+IUpM+gJ4zRO/l/CXbqUc6Wk1O2iB4II\nriQYMc2azBQvjiuWq6Ew6U+MTzIprJVAyY8d0Zk6Es9myx+eGbFGQzH/cPVE\nr4EaZBJd+X3OutUkR92d+S1B3teXrGa8zGjNRtqK8NUwPmBUTnjTi5N/UHVl\n/BC8umwFhWEUCEwQVM+CJJqKf2gBNSJv7lhlQGEXqEas5g9Q1Bsmx1s2O0nf\nJMqbnRs//AOfkr4EPvcFwmCns4FjMZYloRcq+eW+z612tA37FNJbJY3jP5Ek\nddSC\r\n=QF4E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDW/wH+4Jdi0OPMAgKtAFFP+s90TFuc7bakpyS40ZjCAAIgTSKBPW+ILTuGigW8T426FlSbkvVwmhtOTx+rYkeS7vw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.47_1572708119542_0.3050499105877549"},"_hasShrinkwrap":false},"0.10.5-alpha.48":{"name":"@react-ssr/core","version":"0.10.5-alpha.48","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e929dbca78c4a2b654ded05234ae3337eee9311a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.48","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-P74Pl819asnoLNbLoLJa2da6dtxwc6nJr6+rM5zFWkggjxA2mrefXByeiliElkCKyYs1J1hhmbF6FvN/1wYMzQ==","shasum":"251f634dfcd4ba22bd9c96426113b15e322b0a41","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.48.tgz","fileCount":26,"unpackedSize":41246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvZ+lCRA9TVsSAnZWagAArdsP/Rz5iQnC3W9rUhSj1i9O\numSvWWAKxfR8N40mwVMnwyXDy6/++o4GBc+SyIAilXyZGggZin/BMve9T56+\np9mC77JNIt/8iLb01nO5FgCr2yQ+0+kjUKQVo676cOrEYs45pK6G7IIYpzL1\n6EKdipx/kPMqmOzJdaHP28Vkcerv6U/xJiwXaEdPMGOtNJYCZRAqMuyY7ny1\nAKzV02nQF3VqjaeepBQrzE+LLdL5HxzZdIYLMCthvxyFlOQuzpqKy9LYQhVW\nDl7iIAfBOy0KAJCrL6NH+0lucyWwXCwBeN4SRewVa6SDhhM2SKlqEhJUeayv\nFC/aAKGp4u+r0uuc7WukPvC6jaiwpxfmB2LYKpYxyYH7yMyFKk+GJi7tdcfq\n8312TNWna/O5zNAAo01COabiEa0IGTKNnMgjxHcyczXbJqjUUSfSo+Yh3wtO\njMNTvcG1e8yUxc64XYU7dbpsvUfpERvpRfZV4tIhfOLVPGyc+oXsDO/EttQ0\nnc9D5xx1tFvi6u81bGPQxKHpaptrlEP7oJ1NRlgBPY102aCzngnKUGMuvbTi\nB10rIxmxXP0afbAmLx4pMjmecZB2xdrOVwKf8KPwxyP1HXFBCLRGmp0+T0dB\nOr/yByFNDROIOHT7IAZPvhhLclpunhvpstAPpc5KYJCz8NYNkZ4F4Yd7R7Lv\n0sgz\r\n=Afeq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD12uCviVzm2PeR6bxaQ65H7wjwFu0ujHh9nxtlbEXA6QIgRCT2QcG2oizCDNQAr/ya+5P9VDZa27XatlrURuMBjxg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.48_1572708260583_0.33541449250586286"},"_hasShrinkwrap":false},"0.10.5-alpha.49":{"name":"@react-ssr/core","version":"0.10.5-alpha.49","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c1e4533ec0c31dbfe7772f1a243f0b7bf640ff5c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.49","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-0qk2Nc6gdlsnvjIPhfgxqYbG4h/emFyJr8E3iTvjPgMGxUUkiE93Abax71sz2yDAC8e7PrAd2gTEe2vOePQ80A==","shasum":"c00a280b356f90464d62900a850f1dfc066c3603","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.49.tgz","fileCount":26,"unpackedSize":41262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaAuCRA9TVsSAnZWagAADQ4P/23RQIvSF88BOqUvJ/ki\nTNmUM1C1e3JPALRyVMhRGx9XWK8jMisLAwEoarQvowkFBkq5J/hkGllyxKIU\nZjo1bzQo1xGiVJBpV7NBkyn0DSRKwKDodAaf1znFaPzP1UW0SgslFm67xIi+\nOMIYdcsSO8yPi7+cQBVl52dGzdft67nCANPttqk1VGgAErwgG5eCR2f/JCyN\nzyn5vGxcF2oshoxB1oKeca4D/9+1Wu+fWtdAcnsXATBwIVODMnSefWKOn+aa\nQvFulls9nIV8oGJcL48YVdvVAErGmmifY+Rce3twYWLG/YA/mJLvD+REbu2G\ngiH1Bb+2tvkO9Wmgj+o8Kr2cvplbAUl/0c0209FQGCHuwQRX4ScrJCjcsbib\nqg6aUPgwlooDVuKecgH0BYIxOf35/t2ZVmxX573jOmrG/xoayPprF/zJD/45\nco2L2FdEYIjLdjpVRx1AyS19M1MtlFAmqe2NWOtpm2ign37cJMcy/arjUWGe\nWAYnFK13Fb+xE9I2zX6/72tKB4r4T8DYrwmTuzLjCZRrJGXlHq10MuWOni+0\ndLUJzRLMHMbrJzBadEFyUHeahAMXsb/WtlntniDhqtDLiSDxEPCdj3JjrErS\n1hm0FcOa6N0qUwV6sJtL4Eqk1DfVuK2C2ZRCDWFb3B/Jvvd24izA9mijiCXE\nZ368\r\n=kZDS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3CmPjrKKwtLJLOgnfoqLeJUWlGfyLwxNRByNg3bpWeAiEA78lR+7+5SbCBuXljV95TktuGzviVZaal0ukEst8+iZQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.49_1572708398414_0.7781210312520943"},"_hasShrinkwrap":false},"0.10.5-alpha.50":{"name":"@react-ssr/core","version":"0.10.5-alpha.50","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e5f4bec1c7cd1c1d0e0567384e8e0736afb3b7bb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.50","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TS32OpxyGPBhw6u6gqkU/EBZVThUwM0XBmQ5XPJTU8jJGD7r4HRQZwy7RfI2nDEm5rxeE/KjCMvt6OeLlHhFNQ==","shasum":"562ef61fc5c01738c632dd89ac04b42eb7a40277","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.50.tgz","fileCount":26,"unpackedSize":41294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaCsCRA9TVsSAnZWagAA+mYP/0Vp8Vx4KkRgZ7yLIhUR\npBS380bmNxaVB9F/b760qvm8LmX9R5xz3rKnJbQ5yJTPj7K4utIj3azwS4Zp\njERZsz3niQaan4t5giRCVLUXuWF29VpmYT1sRRQXlfxpkR8NqqIEeIyW3QFg\nS7rP2xJrEniJ2bjUB354zmFQCuytHtpd3UqIIM8NOkkwq1p0MH+gOTdweOrY\nWoBJEimnMM1/kvUSW0qQxGcvVzpyYOpaCmz84DR0Kl7N+WZRUvxFOxlel0RF\nohzIG+FoQz+w0QJsUTQlwsOrENo9PQjbok3njEs4QTlnQndObGPH2vaaly1P\nJlFWEiytCHPMLrUbZxLPlrcJvzGnZ1q6AsA/oAspUWT1JG5yj0087uYPPFZL\nUNrfkC2KpIEF6VKiR6zRuHYbXr1m3NZ5WI5uxOzYVGxCzIp5hwuraXJODtLV\nT0Un+eN+oRMtyId+A5AGigsb5bH67xnrSkLAlk4cW2aZFSEFch1DFsR41OjQ\nm1/3lAkSv3Ba8nAYgRnXxsHMzKdCMducpv03kx7twOF8dVtpKWS4vT92JYp7\nOPMVR6ElxA3/Ib43SZdjUYlQ3vVdiJ3Qrf5Mv6rsfRF8i6qCZSDvybpF09jk\nKNboLTBMz9Y82a/DoU/2+QE0vc6/vgZ68rsx0vDD7uGPXbks6hy6q06gS0Rx\nYFPb\r\n=WhAs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBy0FhfDrI13WeH2HsIqrjuD8Rzbgn0oV+XOoEyStjL7AiAGzUMB51n7tHgacd+cSMvt6jG7Xa03bs5svR39IpHAEQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.50_1572708523714_0.35964971179527594"},"_hasShrinkwrap":false},"0.10.5-alpha.51":{"name":"@react-ssr/core","version":"0.10.5-alpha.51","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6ab3de7d4779b8994a6e10610e70b786effda7ca","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.51","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VV5fOOCBj1UoAMYz/ARdmYcN4ZuhFll3yb2tkfcT4CyOi+MAQI/oX4T13rTZiO6+tkGQ8rhh0RN3fQmY2yQPiA==","shasum":"821f0a40eedd3eb6298ec494cabb733ae6a6ba27","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.51.tgz","fileCount":26,"unpackedSize":41419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaFRCRA9TVsSAnZWagAABhMP/jbOc9hJ7aZA9DbU0/uu\nNPp6ZJ9D2euLcd7o0Q/gy1ttz0S9fpu2CyD4Nd7RQ7qV8CSb08QSYV9nkoHz\nJWYUOsBzjN8WzRbSwRCi2BsrV/lnlUiB069/XZcnAyS93EbFG/r2GkzaXeV1\nBWQKr0XL3zypM4ynCi4DtxWxNjNqt1+QyzgkKFmt1Vc5dCBw+UTRKsoIlxTD\n+xdCHnIs/n2mNYkVMM8IrTvF+R3WLj77zQnX6z79JdP97EkcDyy0j+yiSQsH\nEKow5WFbl5v1YoqwS1jHGMEZBOKmGIzEeTm027jbmrJxYwsJFwZEZmFf3r4U\nzJ9qYkp1RHR18n4sjPH8+Y2YDMvr8ec2MLDp2mO4nYLWuO5gQ8MmsY4+n5k/\n/P8dpTFLvV8O9J2E5/hXCfj0NPDYP0MTPucULYV7pDxgDmHUwnP6vO9Y3opj\noeriyHzjueSpXJONkwK8eYzFzTBVL+0nQ3R9cW8ZTmDYTFSdWkjgqdy8P8uR\nJeMJFNjL2XAqRgI1gabxKo1T6pyPGL0Sv7AFRW6vCxz+izSGhymP9JzrN+JX\nZNizJ49uVsQW3HsJRCegGh+gUIFRM+adg1xravPjR8jEAP3kh/Oby3risX+u\nb51V+WxRPphXXB2Ybi5sC5GWy3GUX4r3uErWu0UD4lxLebmouYhjdjhvTHrc\nZ60l\r\n=8Y+i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuxFlrvQqzRuJskQGLFb9cUmYn68e0lVQVWeUsf+jHmgIgUajrUjE8oMPDBqURmWV+kgZJp3K28869t+VXUUVjbjw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.51_1572708689394_0.5140629467819484"},"_hasShrinkwrap":false},"0.10.5-alpha.52":{"name":"@react-ssr/core","version":"0.10.5-alpha.52","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"587658ca4e0ade781d10137853d7e41a6d3c3b0d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.52","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ho5CWVvhyar8wFaYmovrPFVaxhRMzDaUAitLvPKiHRmE3pVHnMSRDIqD8VF5mV/ahbLfDG81cl7hm7fbRNpONw==","shasum":"a24b05ae6f1a5c28056dc3226d28620c249d8ba8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.52.tgz","fileCount":26,"unpackedSize":41427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaIlCRA9TVsSAnZWagAAh4YQAId3HXr9XmdLuuGKjPHv\nM1M7qB/Aq80L6NYNqT1ZPhLXio3NhtZKDiIAUuAnDHx+BsRGrYtRJGy6V0qP\ngUDuCGuOoaoCUr6r/uWunZdx1KRxL4jvm/0V+CYI2eDgkv0miDdWnBy5561n\nsb0bbTPyDgRgy5DFkqm6jq6j4unsfDGM5v7xce1sWGskmKdIr3SVmfT6y6yt\nzP+wtXup58miq3MZlgc2RJMvc5vXO5HsIIbCWejXpQmtga9LADAGX+5ttX7X\noIasrWgJxSXG6ma+/IIPWNDFQm8wVBGtEAviigtp3Vnboop5kWtWAwkyGhVF\n4OX4dKdvODKAmUGkOJVkYRxyqUFisGQvlOAfej6JHX5wmBj5DLHloTFapPI4\noeOqObJfcJxq3qNWjXo1fAcTQOr0CGLf/Nu1rpoc2zfrQXFTIB4IJ5vo28Mu\nUBHxKIkNHv7JJnazhLI9s27X+hLhdOOiixjxY0wVf25gWaMoTairIPJWPecD\nYjaGj9L48yNXCAkDEfcGEJVnFtLfRZs5MvLwocUTJv4vs8/9ac3nvw8NwZA4\n1mmKYQ2fWQQ0GYkOsCzxggWWO8dgt5+D66nEwv/60Xmh/bolS75rZnPyd/qm\nh/RQqC6zSlBOrfktjAt8nTEaPArGlrA1HOCSOvvjtZ/hXef2Heu7uge2X+El\nduy6\r\n=EtB0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYqHZh65oCto9muhlhtLHCRMpWv/jeDSdrsuB26Fj+PQIgcokCkSY03Oci5OXqHur4R9ehEM7GrCvIvLNVSO3ssE4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.52_1572708900527_0.22566176702150487"},"_hasShrinkwrap":false},"0.10.5-alpha.53":{"name":"@react-ssr/core","version":"0.10.5-alpha.53","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9fddfdd16291c2311112bcae85ed2d55aec6d4bf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.53","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qUkRrWYcPBZNFrCdS9owdFe33XcYH9ggDGF4UqKpqxQh3ljPb1pdG8SBJXSKjXrEatdLtujCh/zynvgAfCkAtA==","shasum":"a43d8ec485bf0f45f7aab0021058678eb44fca29","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.53.tgz","fileCount":26,"unpackedSize":41570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaKaCRA9TVsSAnZWagAAPBoP/jb018K9Kyjb2Q3VkZek\nPfCHGIqC/UTK5SUF8hLranNeuZ5b2bDQDAIYFYmS0B7b2kCd5yvzGzCGjptX\nVeZ3wzvvjN/03CZJ48n59OrG2/rvxY/N/U8PL/DhF27MqemV33nwtdadB9Gc\nkIUQtLaNxzWGYDTECqYQ/LvfccQhD6TbKxgJMKIeNGCyKH96wUXfX2J/PtpB\ni+awf03rhV9J16ISM+4MOOn9xl7DZ2G9sDed3nsDEif9oLk3sMERI4GSH1fs\nBOMOTetrR/x3oVoBLWeu3GbGZYYgSyxPGI6vCh8XFDlxd4dJfIfffVmFy8lb\nt9FmzvYw8J0DkkH++OI1OHsAGc3TXKTQqFcdGojpDa4mVPvgz5wwXSIKvFUQ\nSRfMVQFyMvWNzd34xmg6MxPbtX0Dcgaqm8A8BF/7dMhnIibTXdn+/ukVjAum\nyWuOXkKjRRhbk8kwPG966Od8bRmAq65PEfASjM7XJ1bzhoVCsZf4RGQ+MbuC\nIIwQJ0X3ZgFhM5AXU7OjLehi+y5zwsYxC6wyVq58NoP0RV2uyfHSZ7wYcPsu\nW4pxVE6WVcFaNyG4oNE6GqjkaXmFDEXzkxX7A1x651/+/0kLPATKfGohORww\nwzs7SdKEKrs9MmsSQN6nvjKLGgXDbHOvcK/VNky2EGmbS666q8DuQjDoF4u8\nHz0y\r\n=2QKv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDdayGeA7IjYQgCiclPJBwCyyjc1cYysu8qdyJ5SmPmQIhAL2iOGbAya7TK/CzbdN7GJbi4FIRtB8MWkb2MNmvj7nd"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.53_1572709018123_0.7591022957691229"},"_hasShrinkwrap":false},"0.10.5-alpha.54":{"name":"@react-ssr/core","version":"0.10.5-alpha.54","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f2a4505849a6be417bcb79e38530b27d0845bde5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.54","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ueaOYEt+GTHDB2aZ/hQ4sQ3ERNPv2fa9KoXY94CjXMZspp2dpPwsyczuRVvaUuYjiSJQ0w1XobuxAzhlMAAqaA==","shasum":"e499e6ff286001b70ea81e33c5a46d84b12864b0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.54.tgz","fileCount":26,"unpackedSize":41445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaL8CRA9TVsSAnZWagAA+tIP/1FVbtuXudEy+NU/nl+3\nwNPDA0UBA5BV38j0WPtDo6McIDNiXHFWQj41x/cBORIzBF8/w/aOI6D5+p+W\nHwKB9SxRTX9J8C0Jr3OYPLCmVLQCSTOgbcAnNB89poGdK43O1FxKxKx+wZip\nMXIKGxAj2osAoT+IcNGVQfYbdJmj88Np4Kj3ZpkVan9gpl3/LdeR3nVC0yi7\n1hEFPRKbZhQOL1lc9xVJZ/lhTV/7aAlb0vehyvksA3rE3VRQWf+DC0A22KJf\nCLi7BTUnwcBYfvR9YF6+buppBCC7lw3B5ZWaToSFBabgEQezDzvfByS66GfG\n75F2OHUGHjdpKKpRiIo3Mtc+/qwEDMOP8bDN5Gx/C7o95e2fUegmjZbVS3yn\nx9wOp1QPN2HCSv/Hmlqch58lQO9V6LVPa09oVzrU25AOvhwvQBHhCcedlLVt\nno3E+caU7aA7+r0nSw4pnDdfFbUURFNUbwVDRDMQ6/4gm/DG/oVpX5hYf8mz\nuhLaDNLvyeyKI656ND2LtEJufI7hHj6X69RCdhXU+nb1uykNeBoPtoFA5UHd\nX/1UFMPOHoH3bgJpBhTenOAWL7Wa6Adv2gDKkOopdqFL8EQqIWaBbhbSFKEc\nw5ttMlAnDKQvVrC/0fw0GqeYO1Kho1fRyBpwrG6QEblxTVETrAAXg2oHJoaU\nT343\r\n=4Skj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeptO+63empBQhGvVv9CJVCGqyptS1jb0caQJNbTWxpAiEAl0QHj1Q5hfb5lUS5u7WrJaO1RfSdarwWIRgjEbdeiao="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.54_1572709115709_0.0194850821035788"},"_hasShrinkwrap":false},"0.10.5-alpha.55":{"name":"@react-ssr/core","version":"0.10.5-alpha.55","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"31675738bb39c25bd5e5d986516b46847de27057","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.55","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LCcticQad+QuRNG7UjfrGXzh2/1YkzUmL4VHj8txXia5c38zO4AXz3caQi5x57tC3mb4HJSq8AjlJJKAfTm4Xg==","shasum":"f527fef21ad2f8947208849573d8e999f7e21d86","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.55.tgz","fileCount":26,"unpackedSize":41477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaNUCRA9TVsSAnZWagAAlpMP/iBjUV7ha9NE3Oguwiwl\ntthycjJl1DbWKLibE2/ZLB+/Pwj+LJIkyC2kn7xEGgspKpwys8vcRdOjCAc1\nHD2EQMBnB71bNhfv8t9PWqGoxyuw33ANmS67H4adsnq2aNBvYsB2bLT6/3Hb\nq/4ToSN/qF6YsQz1FG+qYroAhvQw8vAqVhBXQv8tGpoZdS/JlCNr/6e1hysV\ngWkeMFGOl3JFVnUpwUk+fYTu4xjZOyoNSWqfrQ/87E/LtarLNb6WNxWJIA1t\nWrfas9A6Ez5QifzIeGD9/5cdxH+Vou6LG+GGqRbnvsazTnyNt9hBYUvhRGpB\npkM2jmuJHtNKeegOR7slhdGgT1ODyrBy1KhqbxqD+YGonUJ5HQqPfKecHg1P\n6RKPGH9UbJJKZ3YMJUPDsWetwlM2TyokuzrQ0OCyTgDfzYDuiGtlKhd3pVhp\njo7N6hH4wImwMZaUyeFDQNnTB5nrko8hjTOf7M5YweCOBWGWyt/9CpOJX2bN\n8TtQlr2R2O6cT1uZbbHmW3FzQagI91ogpkFMu+zyAQtKN5/Vt6ur8gwuB5Bi\nRhS8GN7rqwVvj6lQQ23doO791qvmcr5aZCnELr3tDkBKOfwhaiP00FlffH1P\ntVVyIm1ta9wVP61riPd+ZNh9tYW0R3D/b3CoPwX3dYmBSq8BqHjbkSx9PhS7\nArZd\r\n=LsUJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICPtc1VNRC03YLG75rtP0PXr4odKhDAaQX4TesTzSZcoAiBVLYibO9LR2WFpLikRgLo9+qlEOy3rLST9YvN9dTAp6g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.55_1572709204492_0.4519241745987779"},"_hasShrinkwrap":false},"0.10.5-alpha.56":{"name":"@react-ssr/core","version":"0.10.5-alpha.56","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5419b1102678f8a1fb42c5f8b90acb24888b6d0c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.56","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sxa7lyZ2Q/4hyWKKD95pMc5m6lW4b7aT6VOyeqVae0299as18HxfI7FCSLIDlYpTT9mzLQDKoWWE4cQ9nCzfLg==","shasum":"95f6f86bf973dc9e4cd2979907713dc016f9b7f6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.56.tgz","fileCount":26,"unpackedSize":41523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaO9CRA9TVsSAnZWagAA+nQP/RufZY0a4L3iPa86FVlv\nCF3bVyzCKRaPtet6GX9dfRifwpXP1hHv2iN/jXqhRt9AgWhWMvQ/H1XRjccd\nRVCYNH9/v/vGPqVnrdcrYLzyZ6Hb9qRAcuF+yYytA2T+0Mk6g4Jq1/Qsby1t\nMq8ueVquafuGHZHTezlTRv5QdfpuYY4Wkyhe3e+B+m+C+8nfjUfIdE6Rszd9\nMjLqL2/TwA2XaiaGhzwJvZI76+hUv8Emu3qBmr2iPL4J3+yqm0RN4allrV+z\nZ09+cZlD2LvJMPJRcEIglg28HBZ4vECWMYWzFql+rCMlNiJ+yVEKONItYjdD\nXNgFa8bCzq9wXA6AAzJwUJ+oAPSg5KUB1KsRzd/gLXTwlelrF5bS3qwMHwXu\nZ3sdJ43+ruBEFisPTOlyynXyn7dT3tVNbW/6mcob6lVfjV0AJeXkXEf0RIyu\nDYNSYc5Ty49yCP7dTe67hv0RJcM4vVkSoBgu/bJtAFAoffsLU9t6xDZKq6vM\nTp3gcXlqlvVzBPiMj168fd2r9N5sRtYuz2lZNvGn+W0ZmzKc5JCdV5A2cExf\nQvGMp13jQX1kQCgszEaoJqJ0NILOHz0yD0pM8UVIBwJLdzYNIN0+MMY7/jWJ\nAe1G5ctiJR7v3ZMZjIfK/Fm3if2wv7iHi1mkS/OECvAmwjJaOjnF7HAibZ1u\n28LU\r\n=7781\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHnMS2Mc5n6S8zQaqW6XH569JYM5Yh1Gov+2m+wah6JEAiEA+83x4YzyMuIfLb4xjjbbPrXA0WfChxAyCCPsQU4hYSk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.56_1572709309195_0.13258654236157952"},"_hasShrinkwrap":false},"0.10.5-alpha.57":{"name":"@react-ssr/core","version":"0.10.5-alpha.57","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"83f7d78469c471ec209cbbe02100820c4de2bc0b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.57","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-52NPRxKbsHewpALqBP7vUH5t132x+iIxzy2uuxtGg4piJl+AXIhiyEEnWXW8p13Ka2Rca/53F1bYsZWH0cZn4g==","shasum":"25fa59d0a648d8abe4d12c4ccbc7793802203e56","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.57.tgz","fileCount":26,"unpackedSize":41576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaT0CRA9TVsSAnZWagAAHQUP/3HLfdLWKRQ5YIuqjM7E\nyyOzmvGJRfgVzLhB/zyfq08d9Vinsjhi01iVxyVO6qxbe1jsIPCGoYPR2Hs7\nUTnugWIc8ADbUS+HEMJal2ZZg8lZAE/619pXcsYX863ZHQ5T4tDLOxRQFNYJ\nLx2V+rshn7u731XvZftVRNsE8eN20ddv8kyWmfbWE5lAD2VQbVE4UBUxUojm\nl4gb20UbSydPo+IN9PGkcr74GsrN8USNrk0qStNHmtg9XOVwLpSmmMCqMpNt\n6+2ostV4kBZrSjB9szzSd2QNEmzA/+vMDFkyUWEATxf0KHl7asnlPXdUrtkc\n0PRvcbiEIkm7J0f894JssinZUlH38WTC7LsVwzQUKZ+ZVcW9OCdXYAfCzEKf\nepowcSfh0x7uOU+Qk577JOB6AMG9K72q18bxjHFRBOvGjvilEdoTPOkMId2Y\nU3NesHoU/iIo1umhFELjOPXJUfiXbHLpitgXRjQFjh9HdpUatH4nQZhpsFp2\nceFm/TIt13S89Dw7VW0vhJlGr1gAoah0d6Fd9Rm4LhGs3d9PSF9q7RZvLRi6\nfnlYF9LWZdeYPRjNyAxFUNkQQW7/0zlCs022kaphArYN2PCMYCTx8/OtJQwk\ns/qwWRxZIzAd6vKAIWbjKTkgpPHCFUHhGWZhfBZiUEAYc/GIwZXVY2OKbCcS\n1Ibe\r\n=VJWV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPf+HCypQbSewZIkqYdywtLGPWUdutvz7p+45ihWm0tAiEAnhrmWGcWpsYklFU71VJUgflRqrrMSBMjV1EqxjygI7k="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.57_1572709619833_0.6399362645048416"},"_hasShrinkwrap":false},"0.10.5-alpha.58":{"name":"@react-ssr/core","version":"0.10.5-alpha.58","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"343ef222a2e157285fd28472987c05f0905df467","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.58","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NPJlqxQhRHtAylRUIWtlMO8mRPVo9AlJULTPXVjsLDIc4xiWL9m6db0lQLtA0XcYMLy4yJ+ebI/yUHoieegU+w==","shasum":"1d5320de6989e04e6700e4696c56b60980e6db3e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.58.tgz","fileCount":26,"unpackedSize":41597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaWKCRA9TVsSAnZWagAAlvoP/1VEBGd8OnhzFmnrJLnX\nLAy2uTPpFEKQk1dz5+ozCfhwJk4E6W0Bq++08g5dThomPSus+QU1TCRPaDo0\nQdODOQ8tgAorr/ddY8eF0KqCvi+P1HYHxkCD2JTf84lVZdAkttfOJiWBnkNk\newr6GmqPblI1Di3PAfbTasdhJLoNMRMyNrdHZ+qc3H+1+M7b+rX0INIxbKYv\nZ8CvH/2MnV3qUYmLorSFt8U6LqKwQniG0TEmI3PvtIqsTjslSbUyAp90PPZW\natF7cM9p2OgxZhYzN9df+kkaT5jKnpkKoQq1vTnWfLIXCGuwHyEbZj6nfJnx\njrUPyYclHe+divKenWwr2T0y3/tfNkaXIHmRWkt22eMQdswo+JcuAVrC52XM\n5BP8kiTGwYyBlJUCTg0R3PP8eKyxvVQmbWfD5IzymrLll66y6L9xI8t8hzZ9\nD53t6+RjfSWDKcJVGB/81YOXwtXogQCQ2Ey2g1Bh6cMBLrUOFonM51XLl5wr\neYDKnZtEMxTayVFltPyWwJKNuP07cjHNgwvQguT2Q7SoVZNeXH7G5QtY7V8T\nwcmFjBQVhTTES3LCcurMp+uv7Q184HJAbBCIBucT8qnUPFJClHzZ3Uap5Mtm\nM6tJWMepPCmLZ2dNIq86mPKYe5I0kV+G9XqP2wp38siexMHpPmxXpiCGoPEG\nW3Ts\r\n=SC6e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSjA1DFNUCLwac/5zwuHEx1d3FNeDt57UlainSnVXYyQIgOMNwqeU7vmUf0Qu5eBFyqYVlG/65FUOIz7Nu1UfOzzI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.58_1572709769962_0.14919350813572474"},"_hasShrinkwrap":false},"0.10.5-alpha.59":{"name":"@react-ssr/core","version":"0.10.5-alpha.59","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"651dadec17b1a70a6c37a3f67697dc492df83f8f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.59","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lEJnp/oXTV5b01NtafTVpkrI6ODxy7sQ0EIbJFjKBsQpr3Uoag9UsbeG+DnC3q0edH6UJVPjvaxAbgERAWQjAQ==","shasum":"0d2c0213f48dd7ced47c5026b996e1a82a2a477a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.59.tgz","fileCount":26,"unpackedSize":41820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvaYuCRA9TVsSAnZWagAACnwQAKCKi6U3QMi8Mb3KClvA\nsGvXUv3h6rgVSL7IlWYocCXB0BmaC+je8nii27ExJhX4aatMUZp/mXBClKiB\nbmDOof/DcBWZmW/JvCg5ij3GxW2ESEgtlMwdU9pJA4I3lXahUB3rB3AmCIGc\nCwmzdwASkV+1lyBH+gxbMVzcil+PJGi5i+4utlQowinytmWkqvibcRTQY09L\nWlq+vTfL3GtgntKcPGyIJy7jxFLM+Zw1DEzljbI/QH7uRcLGo8938Os3BODz\nuRYjpPEtjOEpwRHCnGioJJ8a1nRnUQ6Cujabg7TW8v/Cc5TsZTiao4N4viyq\nuwemgWYVo6cZyGL4WGjTetQwgy2SKBkyLRheX+5qqzbj6n5hLbv0m8etYYx5\n+Q6a7m2vv4kop4fmRuL5Pj5H1BmJU/lrNsSmALh8O4/1OQvqjE3bnWT6TaVu\nvNI78div8IRZGwTiKk7eyj+jIdzt0qwfCf9FxtQyaGqg9FA02NXuntBemCKM\n4t+BZImzRNkBszLNxHyTqaHNq6zFXtYOZ3TmoUTWAn6FAZ7VY/NCfq/oURii\nGUXGd/qNuR1F28Olcl/XdH3H4Pnu7aMeNYMkVXc8bxtPGEjML0U+/ZD9sl5S\njs/TcBVsWRy5u5Idl7Y41T+d21dKnO02GCgSXcUTgi5AK1teDld0kvODFuQd\nZOfL\r\n=UeTd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsZoKSgiYyxIOVaWKF7o6NKQ8uBHonQMLWaURebtNbjAiEA4Wl0HB0vl6ABqL5wB62n4NtQwERG8M0vpdxdUPnYHb4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.59_1572709933823_0.48055130735013973"},"_hasShrinkwrap":false},"0.10.5-alpha.60":{"name":"@react-ssr/core","version":"0.10.5-alpha.60","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"be4995eed735db315f670c9bfab83f4d022ef466","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.60","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-vex4nUXjupcANxurvZmsY+cBh2YGNaxJj+AUCFYg1cElptlEvMw684WDvmCwxarUnQ2DSzn9DC3w7o1oUv2AxA==","shasum":"60175f4b4070b785515c01ad7fb0963cc27bf42c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.60.tgz","fileCount":26,"unpackedSize":42036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvadbCRA9TVsSAnZWagAA/dsQAKLPelxC0akiGyPDLKvp\nO6V5FzSg516jQqd7WIxaRs7tvY6Sytu7OA9h4aewK69GYcpFnXhoJ6u+NL/j\nEiJ3gcifyI1FTvgBLmOI7FpFFIUUmpih4enBWwXudNSgLvwdBTjSesdggs2l\nft0m18M6IqiihyBSz5SzeZYLGOy1fnwiOUO8Epej1LswqTJHIaWjfRgOvuOs\n2iV3Thu7rB7kELfTmHwNmMfbJbRdPkPiR/nURux+WjeC5v7RYYg695YW8L7n\nA/NfS+3qYzCBEA8RH2gk20JRheOdVavXHxBwPkITUnG2m5rMHamf/oRCNgEQ\nfyBjrCc9gJ2zMQqtrh2GvpqyxLO232T6yCZ877hqa7iax9IZdy3rZw8syFkm\nsEVZ8jjHV+bE8dw5hDyzICjJT9iaTRhOrsiOz4qJMzizGs1FQ8Fu+2UHXuvT\nGOvc+CTdsw4LskP119X0VRIyGBooaq2uoNPhiABkcEGzKqVJaTTxj7MP5VRD\n4c4ha9DExNQnLM5e8aXbp8Z+Zk3MZx+kuzCST/8zwXLOfII4HbcrpreHN+VK\n0N6CUATMZxU+sQ606UcQjOIl7opsALfSe2N+suLBd9wCxw0AEjR6IjuhWbQl\nrpfgq1Pi92NgYxNeE11DbIEJphw9PlUT3RaAVI691hIkr/4fLsXGJgleMWiy\ntFLy\r\n=/tP6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDYKipdxUOfNmC8xHw2m/t2yxTG0R8cdCtLsUw6vWTOgIgQPcMfJM0L4XpGtkkHENo8cGlqCSG0r+D1hFa/+AFQSU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.60_1572710234471_0.9607297169482465"},"_hasShrinkwrap":false},"0.10.5-alpha.61":{"name":"@react-ssr/core","version":"0.10.5-alpha.61","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"210f1f09195591ff5ad5b4e6072767ac945a73d9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.61","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9wmQKU2pclfRUQn0XHcqYh5MjcBv8j01dLciefS/o8CNmeTQuyxyWuJnVmU8F4Z8blXAKA2dBL+lQp3lon37Yg==","shasum":"7bec7eadc3e64a282e3b50461a66ace1d0decee1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.61.tgz","fileCount":26,"unpackedSize":42042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvayeCRA9TVsSAnZWagAAgA8P/1yYyH4ciiprczgzKLYF\np9FdDjPA6P6A/dO9Vr70MMejaM8QtIXGxtMf/WtG7Y3SQB9n+Ww4FmR2Itii\nqscxNHMr53U5IZbFQrFbI3zxhwmHM3UzySLpGiJgW4JaLn1LcSiBgBVMp/pU\n1jmfAHBfgfmvbFY3S88oUqjFBrgfTiEfO+ARAyEjh8v7bvbQB4es4ydMIt5H\neCswjpUDhX8LTOt3zd/y2fXO3mWDtZtnIK9NrOcaRV+JRxJJ5/Z9G9BqBPjk\nOV0bL/Gevqd4o0HWdYOd2G3amQuYFEAJkJBBEX813EwwFq8s8Q47DXh+WLko\nxpdna+1tj63qVQp2g5mPuUcOlkeJdpfzJfTfwxQpgQrwn3aJsoKZ/pSB9ACC\nT4OBRUXuqPdAdlSxKt+uIJdSco+HjDUce8vsKv40rI4UN1RIW8DFUimyovqD\n/gFGtQ41i1kJAI+BlRoKxv7g5FTgyX00FxA8KpbiBmResbza9RDxE5Vf8cLx\nrbn5VVvFmOdkd3LBuhg0V+JrwUhaGkhHTE9+ySXVewBsPpFAzxNY4OejwfBV\nZTkxHZeN1B/iSyru4PMnp5F7BvCSaMsReY6rxRLh5QBs2vt6QIjc14vL+Jjx\nk+WooPv3YXR3aj74bc7Tc3OrvQnnP3l1jBRAFzVLytDQKo3HCBYY8m3S5i11\naNEk\r\n=2Rc0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8fhPmkH9MMV6+3ni5iCYXZh9HbRGmmCD0RvD04URX/gIhAJLslYiYo3bhGbV6rh/4pBdfZkWJ+Jgz2z6h1pWYz9iK"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.61_1572711581453_0.19474826542696566"},"_hasShrinkwrap":false},"0.10.5-alpha.62":{"name":"@react-ssr/core","version":"0.10.5-alpha.62","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f2224f5293161be8a862907557046b09d6dfde1f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.62","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Df5nUhjaI7IkMzdVk+eTwBMeC8zAbEuQDQLuO32O1NDqCqPGFXBGkUroSczbdQSBMiOs4n/TS6IZmvv7AwKHlA==","shasum":"4b97a7cdbb03a9ea6a39984ba995174b08dd20b4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.62.tgz","fileCount":26,"unpackedSize":42045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdva0cCRA9TVsSAnZWagAASWUQAJ7TS+twVvXAECLYbt7s\nLV1kx76PT8z1erxwfDNKj9Jh1MW5xCCt1AbvYzCi/rerejvnvwFST959Q5YY\nNlMaVhXMEIrAgYZjQ4lMhrMPhXcvnzd84MLULMSJ8yqm6aonVRoDvlmeKL/3\n2O155HIbN1zJHnceITUyexj2ap9i2OiodJISS2wyu3Khtzq7W5VulfdyBXEV\nDiVV+Wyie9qo+yJGrWmmacjGN9fDEBAbThSGof9nbhERN6V8/V+NaY1IcQI8\nUmiGssOzoZnCfR9o9oWtmE/gCbQV3DoJH/wf/CW6gLjPWdii9ILN1gV7+rRp\nnlsN4Q9Fe97Eog7OWAumqwPhHnOPYKDAJyQy63ZIYHZ9p44ayZQSLb1DeK1d\n0+O6cioYmi2OGmJKT1syRek5pP0t9Fe3sNacUJaNtxG+GJvZ0ZL6dQYMCQxX\n09mOroXIygW5s7nqP0uj46jiDAzkkXaD0X4F/n++/SyVj2/PJV0lrVh3Rqqp\nVIR8LF3/7iWvqbI48oQjiCLutoqviwvuDM24cl3Z6MAcr5W7ukt7turT1xSA\naV0pMoqqA3lQApoBRi3eS3SosSzy3DGvA0zDKaWNSC8EBZV28DXZPMdMEaJ3\nAjcWs9W495ua2tE7fZ+7bwpT9mIdqOb3aUttxb7+KmAAvt3iKHUp4+vhFZaw\nU/lC\r\n=Obb1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6EJgCr5uCYzkXE0JfR971UbTb4bqbSiwPLHJwy7HCnAIhAIZc2n1UmSv4zRVgiGlhP2aVy+3QUJZZ35Eo5EOnSGsF"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.62_1572711708452_0.7522782020751049"},"_hasShrinkwrap":false},"0.10.5-alpha.63":{"name":"@react-ssr/core","version":"0.10.5-alpha.63","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ed7fe77426f93a8066b2f0812046d539a97ccbc1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.63","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qsQXIrpPwqQt5ug/6Zs8RNGXvimCTDXx4J7R2hUF4lnQT1gb01DFRnpZ++0KZzjmk3+NwLpE5EGcNw37KSXbyA==","shasum":"6360e722bfc377d33747ffd823621c7a30431be3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.63.tgz","fileCount":26,"unpackedSize":41794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdva49CRA9TVsSAnZWagAA6gQP/03YzqVv5TROt/jdg9wT\nPbWKsj6XDrj4/v32/kEyunfu+swn2piuRnaQX/WCbn1HVYi2fcT+cDbLptxJ\n/dRlpEMY9n/AUt/IWtZ1zdj4fXIn0oC46cbJfPEk/cEx2CflCed2PKNhW12f\nlfium6hq68vOOBi96bWs6mqSf+6CrjfCT69j3FuWe82sbqXgKuTEoeARQlZh\nzkwuRbj7AaGFYDxYqW/QXe6u9ArndRNzrKUKHrvk9KczuKPj5VLwRoVY2M9X\nrm8CxWmLnf3QktVlAd4HXHUFz8S2PO3Z53cNMmI1j72fxU/HQ4PELjO4Xz+y\nVHJcfSc/O37dNSVBoqI+Xw2fA1KXn4tMODAtIJ4EX8BxIZc/zdlu9sKbqGL7\nEI+GLHv/MpiMn/ZB2JQvBFEH7YW6tfTQmc2tGeylgoLGadc4syGMVT7r2rLf\nh3r9zZkRXfhCP/+92jVgIWYbtSYP4oj/IUMDIXM0XlYXh1MgsPu1WuRyisfG\nkweGhQZudkAwtq4WbUeAZtMb5pt/iXZp5R1ERHPO4pPpYT3cioUhcnKZsTcl\npfindfVFwhi4tecyQpZY7pUCS4CAzgmNr0cTmZLTGdBo5vz37TLUImfy4JdG\nufjXUpMxqssvcJhLKLM0s6C5OaikoN7THYMdYFSQMOi4e43AcHzCpmvV2IAF\nZ3V3\r\n=03SJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvsKacw26TU9Lng1N7MiunUby+w38pDZgiLPiyfuGu7AIhAKsZujUhW+EDrRwZSN9inQXrCQpLGNrgnQDaqZMdPyvA"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.63_1572711997368_0.09655434405482355"},"_hasShrinkwrap":false},"0.10.5-alpha.64":{"name":"@react-ssr/core","version":"0.10.5-alpha.64","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ffc6523cdba9dbcff2d50b5a0c3b4799d1397d8a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.64","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-AmXuGkIBs4a0sd3cmdUON+xPka53LYckkVYIAgBlADXJgpDq0AzptqeGOp5mxLJqxyF/7p9gaCc3r54x+fs+Cg==","shasum":"0759b1a2b4aad942d4b5f693cbc7d4dc1ec1684b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.64.tgz","fileCount":26,"unpackedSize":41942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdva8ECRA9TVsSAnZWagAAgsYP/1UVu03zgof4Oot6oiP2\nPwlv5cRg29KxMDoS6BsBOT650hzPphOMaWJGkOONFasUCgSwB7X/kbq0eqSM\nQLt7pc56752zPFBCXFR3ub4U8J6wY1KNjbV08wk3uOUjbwaWqVZAwrqYIBlQ\n3OdhZ/O/glZDKZbEmurRADEn1KIsmyusL5tzqVU/cvsI5gG3scndK6PV53pl\nDt7+xw8iiM6Q0a2mzDvcOR1wJCQb4Cuoy2g60spwol/7i8Zh5HAFZZoFDsKl\nK+BjwHF7EXHAdvmykdsg88y+lVhHZcKUodVTfVR3gJOF+/TT+kVkluMg2ZE7\nTHtshS326Uo5qbdcEFUtF4Xz/Js5cXI39hJ676R9rlyF2d4eYZgMxPtenJA+\nV8Mx0cYbYtD4rCFFfexgp1/Q6njcnpgiuCdkNGmP1/iXeiqb+yH8XI96SH4B\nLF0TvV0u5Lkm+bw4Zu7SqVf9xfka4Js8tOTh6mz+K69pcFceIyLagZ5KUWrr\nghUNVYTWN4wq9zF7/34UKKMJAFdeL6sY4rdx0c9HYMIqbETmghIrrTMGTxtn\nk0SQnrpn8LyXp46hJMLX4ZUsUC9RHg5oBgKhgGbiTYPydAx5zLvl72UBVdFe\nzg/v8KD2fR9MrZIz6VTS1H/1GoSnYbVSV0RfJmBZmwh+PWwdTwV61+OaGpnd\nQgKt\r\n=WwGx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEZZ9XOB4JH28d6Ce4sHjxYw74hqtK62V/KG9dNP8C5wIhAJGOeH9KpXtCq8RK4MPT46dr9bolWoJeEvfDIBC+jPVk"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.64_1572712195480_0.9144377914705717"},"_hasShrinkwrap":false},"0.10.5-alpha.65":{"name":"@react-ssr/core","version":"0.10.5-alpha.65","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"26b7bb7d3994001ccaeca515e747147b74e07944","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.5-alpha.65","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Y8yA1FcGmZe6ib14MaKspbQ56zus4uglRvoIUHfqEm8YTrNjoKaUjy76ZRVvp25YgwU24vLDuI2Z5HdLK0d4GA==","shasum":"fb154dccd5ee252000dd142432cb3a656b198cba","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5-alpha.65.tgz","fileCount":25,"unpackedSize":32497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvbEKCRA9TVsSAnZWagAAwJUP/3sBvXTv7+wwuI97CtVo\nc8o7SF9isIO4ouCg7/A3nsaqk1r1FfFCE26E/hcLw48GZUZMhvyHgOprcVkD\ncNeRl9r+PjV01BlPr4FbQKSgxdPpNzneyEbh1eLJHMjDYyignrLwOrCZiiz2\n1mu5/c7TpYTmfOUdO00zfbWAp7gpy7xmwLTJ9YJo1f9J1tnautLhG9S5tttt\nLpVsfeMJUGvw5Fn43LBodlqxzqfx3HBq2BJSLRspNbpkoEzGqXFmymp25hw/\nTqxIuKYIPAiX6FACLb+vPo8LOejl+y3qji9OkkDTtMfqrTFduhMtDIyYkMmX\nDQDQXUp+/E9Hx8qmZ4viyRz64WioNNDSAv78E+GPZJPJqK9FDGJFAS5Z3120\nS1kvx/pYxLbdNzotY9m41Tsse6lDa7Dih5HJFUI4dmJj2DExJAGU0mQkkoer\nmyokQQq+4CYYG296mXjP9GDQq8sCz2YZraMjSTpAb93WaMDsTrWtzXuEGFT+\nIPsmcvrtD0PGHhURNweujX0wpWO0Cs/pd4wJIpRSkSUk0Z4wdweKn5bVT1Q+\nKmU19Q9qL7HHPUT+KWwbnDATec8SKiLTpMexjIcjdbSIGN1vMNCOrgAMzkES\nJjlHR1HcyloAtOAFMIgjakfVsDjcXjFguC1/xDLw1vqVqfbFF/xIenZ1R+Dm\n+RqU\r\n=aGH3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVaSv0ZEAHzeiY8Q5LUc30jmVZa3Bop4c8yZbwijNIyQIgNOqYtMFRhMC73nUy1G4jUmAkmFI+tXG6PeEaJRxTKW0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5-alpha.65_1572712713803_0.22245958497343943"},"_hasShrinkwrap":false},"0.10.5":{"name":"@react-ssr/core","version":"0.10.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c3ba91abb626e9abf60477fa6046691076956d32","_id":"@react-ssr/core@0.10.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ZnmvSnlUbfv9IUmOYn/wFZ6h7TnR9qpufjdYwyIg/hIhm3XJcIMYGIZGsp7d79vTA4zhJLTxyqVAu6IXhCVozg==","shasum":"8461e79f425b21d929213a143252659912f1b2a0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.5.tgz","fileCount":25,"unpackedSize":32480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvbHRCRA9TVsSAnZWagAAIToQAIVbfNyLolSqmlXiwwra\n785/XYZLYmf1Q9RGQpswM6rHA2/xPsoeg+BOiaegFpAsTOojTU0bJkJ0/NeN\niWZIbZWCpQWh8NZxdJaUsmDhu5AkLQw/iSj/du3Ydp61BE7x2IUb4+C/vRjG\n/S4V48xms3uTi0MQM51pSQdh7qvISv7bQ6vfIthKbyT3CGcAE5wzzBe9h96k\n7RY9cDFER6cwN13bNY79M0Xwuu6KG2n3Ynt1pj71mEEDp2k+7BsfGgxUAw9Z\ncG6oMHyE/nvMCA/S3JW44kiZP+De//QkQ7kCCKNGmQBqNT0UR4Sa0IuPlOMT\n0yX+QDKIEgxDeZMDaSwAfeS9eaxo/Z+A12VFELSHlhFzjoKxT3gN9JW/iJcA\np6ojmsvLmZH6YXbRlzJKet9i/EnMueDU219ZCdx3ZvrsTtCQ30NSZJIbzFts\nvxOATJuzxAY0aOL3ZHDrJsu1gMNW5aMTjCs0fWTE7i/X0PvNm2RLnw2P4uUu\nDonD500hUUGj+vE4TDRqvrC6NkNnuwvnzSybudgfQPvEAVHDE3hcC9U+oEXo\nAtEiW9jiO+wC5l0u41HVnsImIiCUr0OQgTJp6dYbPS5CdeWoa5E70oTKBd6v\niL7hRtPnaYl9DCNtIliQcmI+GfpXzasxst6Dw1QvnJQt7SySzxQ9IhsyW2qZ\nmJqE\r\n=88sf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBAN/PtqUiRgt2KK+aZrgozKWbkxW3apBlvDGQsvAK6fAiEAkl79TCCThf9EyHiiLhRTUvEcRf+rwDB0/flVBmepUHA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.5_1572712912340_0.30250444382529396"},"_hasShrinkwrap":false},"0.10.6-alpha.1":{"name":"@react-ssr/core","version":"0.10.6-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ecde816a127cee1387473919666fc368bce5646d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.6-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IuLqs1Qe57ckHud1egoc6Z1yOGgd38f+iHMpr+DU46OrSJ6TBLQStdkeLrrWIMKouKlJ7rnVrswTsb3ulm1l2w==","shasum":"8aa56c9cbd44a163ce1b9ae4cde742a9b3527a52","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.6-alpha.1.tgz","fileCount":25,"unpackedSize":32953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwTsgCRA9TVsSAnZWagAAd5UP/j/2M6DYLxQkCxdBm3Q8\nciMI5Pfkr+KbS6xBqUUihf2JdlBTv7ufsX5IHueb2X2WoNCZ/HCpFLDHm8zS\nRdhxi1Lg3JLKpMJDv6HgMOIwB8swT7SA9q2IUT2iG4y7s7KnpHl4ruucb1t2\nZOpQUMd6kHdO6n635J21aWP0fMQ5pRmDOo116liXBfJp2wyxnFikoB0jM6GB\nYFkM4V3SvB2ISo3HXKfxRvL/6Ug/AEFqjmCzO6o5xsxHdHHAoJQ3JSB6t7lG\n+Js1B3O/xcn2dIz1z0oWwBii6LVnCkXK6NO750U/3TXZP+t1pvtTAlKttHOY\nbDFUNR8LPIVTf1QUumWQ1OC4SU76I62WHIMquHo7TiXO2t7v96FsOtXf2Glt\nXZmY+JOwuWasNiCyyPbEY185XyWCPX//gxsFjgxumsOuB3xHTToiKhf83BbN\nIiraC9IXBYJp0Ni3z8dgUtj0VeL+OkuE4D6dwv2vO+xXMsLavj5GBwRbfFlY\n3IYhkX0mcssXlUZjezJyu8GnXaZhxIt+QWMhcPyX+6FPgBQDrvmmMsufcvha\nl7ztjE3JeVZ+QtZP/NIcIz4GduBFv3f5n4qJSUyp2psr9izKfXTgdrXLpbqE\nZ9kaYOT04t4e9UoEfZcW4LXGBZlsiiz1Z4IVFNV3jFaMal+C30fMUG5Eqrqp\nM3DG\r\n=hb22\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENH8yFTLQA8xmxVzz2cAUENO3/wGiFQpVJyjlUymvsGAiBfEm5NCk+7+L4z0f2uJzjbvrRUsvs/qAtqnw4CcTXI/g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.6-alpha.1_1572944672541_0.4809656426859401"},"_hasShrinkwrap":false},"0.10.6-alpha.2":{"name":"@react-ssr/core","version":"0.10.6-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"50fd9395236d1910a843733d88d7460e52a1d684","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.6-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-x0Fb5ocmtnQWx1jSSQFhbuCgdwbSuXDnfl9n2V3nvDjnPrd5retmOz16kmRGXe/w8tbZBIUVcH6awiQYW/iQDg==","shasum":"736089445872054872753228a9c6a9948d0efaa7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.6-alpha.2.tgz","fileCount":25,"unpackedSize":33011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwTwtCRA9TVsSAnZWagAATawQAIik4P95FGQOWz9fH0pY\nO6WuLrr/J7jDlWUwbtHQk5QvEmy727BA3blTe0OVWXBsm1iaaXlv9i8Mk78S\niJ9Nrj9bsdoVcISZRQ6DOPF4FQnNcLPI8zvIWlS7nz6BY1aHgIajvPBqJMz6\n4oxsKNimFMjRwL3/kZK3pESMiYHqdX38REsJspWS6PLe3Qhmu4u9u2kU0B6q\nsdTS3jOCy8WVIISZnqGLir6cQ4YM0biBHNeLz4tVW/Z3JhaYQ2QGoN95YFXE\nGOJkNR6hUy5wv072S/HZheq3Sj4li7GXSe6fE9oEP6IeH8YuIjjMGIFkRJEL\nydZ94WsXeGiNnhVxie/GAPthDmuFU2xRon0OOu9nVIvUnJ61YwpeUp8ALA7O\n2r6GMdzaA7NIoCJKQuJoFPshv91VptyaHikOfVG27/5YV+N9gJ1Q1qVw0jnT\n6P7ZBOsicNbqjkNt/+SdLH8qq4W4b3Zmwsn1OfOEH/1avTy0uN4SsmowIod5\nvRor/elmOjOhqO3C44t3s5Eob5TKyGr0iogX+ZMjX8T4U1im01gq9kNrpk6z\neUgxG0d/0lHdeVklxCYpLiNg1CnirZQoNL7MOIdp82uLd4oHC6wC57egCy1J\nz33XGkTe1wGokhGCeMXDHX+7ZD3WdFVxzs2bHUU/KAz4xSSRaTZx3sIc7wwT\nRKT7\r\n=ZTKh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICPS7ahjmB0NJwvOYdJ3tv4IgXOvFkXPEhNKJRbtDsrsAiEA5CWO0hZ4cDWQKJYCo/dopoGkDx29vltiSPoxMRAOkE4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.6-alpha.2_1572944940783_0.4284094410745565"},"_hasShrinkwrap":false},"0.10.6-alpha.4":{"name":"@react-ssr/core","version":"0.10.6-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0706214fa00fe92ff9e092cf46a15b17f992a7cc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Rules\n\n- The each view must be a single entry point\n  - Don't create other components in the views directory\n- The each view's extension must be either `.jsx` or `.tsx`\n  - We can decide freely with other components' extension\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.6-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-rumZQNDwmcplld1ttgzIZGoKh4B3UdEMbohDFEbEfwHWmgYB+HPEW4cWsDOn79BlzVyY7qlfz3+uBeNat3q4qQ==","shasum":"71e68cb761cfc1ed1997d2a6c4549da53d1153ac","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.6-alpha.4.tgz","fileCount":23,"unpackedSize":32953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwT29CRA9TVsSAnZWagAAl4YP/j9jKK2+UZx9xO/zkvx6\nevRrQRGlUY6UveXv5nBEZ+PgViwJNxRfiEraYmrqwiwQ5Z+3erHOI+H74B5H\n+kFXuO02v/LP8C4Y4LSkmCI+wF6bPKY21vWyADSWsa5lJKhR12SC+5sKYT9x\nrnGnWv12OE5KksBRgeQdv9iG8+jqY7EjQOXv6px6s3cD3MjU3JtGVs2cH8m/\nm1vOA1GvIl4OdWx/wmRgkoJYxbqKjWEJJy9GcSF0y2pdN6pUMoKzLKsEbajc\ndTsYvTZ0RJ8zfPPdupi/Tre6WzrxnDm3NWhAYwMtRQ7SAA8dozhzZP6i6wJ6\nBpRRtC78TQf5VfIml/X0hLDAhwMAfPKhWmZ5M8lD/Nh4HeS+TkLn4txSc+13\n2AkUkwD6dOO0J4MtUrRHGOKpnnGpZrHHAutD2swcRBnI8BXwk+cY3mfxiR1m\n7xRZxfBE8Pf7kwVaF6BOTg7WMq64/40Cz8bTMHDdW/zoTrT3i7WJGPS8zcWc\nyQWunvoJp26vgydgfgqTffvGh3LMgy+ZmDAq3c2aBvARa19fHhpSCf4vmCwK\nwaDacBYTQM3ZOnd/Zut5BA4WK9uSwxLpQl9nrhl2RfxVJvnPzeigMaXEFUiX\njS48n997NZDdJV7TQnOTEcXRA+1qPupAHBK2XSdX0LohBPCo1T0VWCysSCnl\nTU/W\r\n=U9+h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGfebkV6x2BCayMtPvjffO9s2LUukjcnL0106S//v8NwIgbj4DfMAMTpFMsEcbvGoKdNUoVN/yZOoJa8K4JVCR0Yw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.6-alpha.4_1572945341520_0.6820521038278144"},"_hasShrinkwrap":false},"0.10.6":{"name":"@react-ssr/core","version":"0.10.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/register":"^7.6.2","@babel/runtime":"^7.6.3","@babel/runtime-corejs2":"^7.6.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7e4ed73fed22eebf2fce25cb3f91f5d3658c8c62","_id":"@react-ssr/core@0.10.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ajJf4vazJELUg28jTBeyKXHfD5ZzVHQvC209v5/5+WkSFiei14KMeHn1FJkAcKa1o2Wnt/LQjEW+6ksGnOo+rA==","shasum":"1a182aff41b246669194cc926144a2259ab7cc0c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.6.tgz","fileCount":23,"unpackedSize":32937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwUOmCRA9TVsSAnZWagAA02YP/06g28HOn4B+JEDGuj6z\ndKOXIjjAhmZlOUp6vONZA5qFiIrtTQIGdE6julYJwdju9G0b65Iu1mVBEtZs\n16Iah13ZqhwNF2pO92BLrlDI8nHcc7LvJMVOCHsjBwgLLAcqxCud63dnf4qN\nV0P0fXRpzWsd8v8ThCezzCdk4jeqMQ+bwCvztv6qzkxaB0JthEiWtxfSZWL4\nZrmtBvtIw8d/jeGVshe1aUiEAAveVmrR8RedRJzOVjsJlmB1HiiU/JSb948I\nqUHsUNAc038JO4gJ9ZJDxFuLGORSYxXQB3W5BUYA7PEs0r6mxLwEKaequLCt\nw9pvGAp+oYrjT3foMN+yPWYi0akhWYrdw4rQIrxIn+OcdULR+CUZTLmUq734\nNZRHYU4MU3ZtkysKUVl6NE4lkegtTqAgksY7+S5bjFa+9pyvOJIWMN2v/jj+\nXA1QsP1qCkx0b0vaDHpgZDk4P0j4IRQfNUsNfE/LF1gVqQ7ln8yvCfrJqXIZ\n9kIe0lcnT6+byFIfZPfaKMMpbXrOwO4dPkORZSEhm+5vqufeADt1heFgLQuJ\nNdN48GVV4bMrDW1YOJ2N8v/iG/5A3sYn8gre8eAuQWa5RI+b49wj/80DGj7Z\n+u8oVZKyjNSXKKWQmnuSP3zKSYd9FVX3NCPcuMZSY59ozTSVWnoldesBooz0\n43NE\r\n=FG4T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN0VN3zXsX0JLjfOq3DBpvItPVNndmZRZuGBt+WFIcnwIgV8RtO9hD3bSLiqGlqaKfClub4ppK/WPs3ouUaF3rqSg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.6_1572946853880_0.5066377549798782"},"_hasShrinkwrap":false},"0.10.7":{"name":"@react-ssr/core","version":"0.10.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.0","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.0","@babel/register":"^7.7.0","@babel/runtime":"^7.7.1","@babel/runtime-corejs2":"^7.7.1","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.9.1","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.3","@types/react":"^16.9.9","@types/react-dom":"^16.9.3","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^1.2.1","@types/webpack":"^4.39.7","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.6.4"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"54c7c6acc74e0f9df176ce89515877b7c685f1e5","_id":"@react-ssr/core@0.10.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/rLxCEcd23LtAITnppO1Snh7qPbb6FMwfd/7XDzrBqh9xnAxv0d4LHUNgyw8gHBudTdKKidU+6BLExRzy7C5aA==","shasum":"4ed2028fae9a5afa23573c7bad4c2bfb038245e8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.7.tgz","fileCount":23,"unpackedSize":32706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwZNtCRA9TVsSAnZWagAAT7YP/0pm4wieDAviYMcb660o\nsddQaFewwq7HnaWls1WpD3sNP9OwCJXtdQGo703ABdAyvLABmPrIJL41+17f\nN8zEvDBeoXtQBKZXUTm/trfnd9WavO3aVSv2heCYVZ5U13JTGmtY126dJUeQ\nyqgwtqxQ3aqR9OiOs39ysivbO2KmLb/3314tDn39QdOJjSzV2O0KfSRgcKZ4\nwCRDWaLKPrl4YMuAdgvemCacSjeBkWGeq4pJZdo3cbgXzVv6ZnrupuDusZ5K\nWFzLEWpGN/izY6os8evkotOfSbobHtOUf/+t4cQbirJRNomzspwaXBY1ADpf\nqIKkP0Uq2k0/jIT19KyWc5j3MKGqrUAIbJ94iIfGmIWRq+uRg5+TuZqiMrO1\nVaG2HBWslxkAlzryM0Wuv3BE3zXV/6ovyNw+J6AVWLcyGYjrCaWGxkU9b964\nPfbQsHhKWDEjxxkYVCONRyVv5xJ3YZ/izJ4dIWsYpxVxQtIoSXMXWQuzav52\nBZ5+8RLagE0EMB4NxDVBxKfrGhwzUcv/Jzs6njh14hFQRN/5c5ZrVaAoJndf\nUicWB3gQ64x4iQlt9Bli+9wqjjP4YYezrfzk47iKitKcf4br6aLjnzBSdDDW\nlPq1qOBDR8lutp1GZ74EXstb70nxUiSyFRXLGA80zexl78H0StxevBGxjab7\njUJ7\r\n=5aqX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3PhtJ2X1VX3Y2wWN//Rh/+Hi2CBCVQ4mstoCAdwAqVwIhANWNFqWNUT+w162jt7cUbo2HtyAJslv0LpWaTp5AP6NU"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.7_1572967277247_0.5966100248660462"},"_hasShrinkwrap":false},"0.10.9-alpha.6":{"name":"@react-ssr/core","version":"0.10.9-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e426a65412a07c9f288546b6054fe33d00ac2233","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.9-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ja8SZZqneSaIwuVrurW+QI4j04BC7SmbKnO/qpbd2fR0DS4lfCNpbr+nAYksuMpQ+XpZCNOtMrs+hrn7i4HmiQ==","shasum":"5f6f45bf23bc8e99de2699ddb5cc38d44fb33f82","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.9-alpha.6.tgz","fileCount":23,"unpackedSize":32724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyEQzCRA9TVsSAnZWagAACVQP/iJVtWss9TtbAABqDlWO\nmdZEmMzAbRF80z+eXV6y5eYWNM3NxLGTxP85HCliBnS5Hswp8vnsDrhBJQPb\nM1Hh9nE0A5dF+aCLt9KmdtwQdeYBzhA9R9T4l58wSr7GGqzKmQRvsZQNIrTM\nybSF2emYmkVjoOUYvuWyOiU+GMwWSHuEXTGssPYOBG4kpzmxpF/WSSdfQVS/\nSgJwU7z42xBY0gngiOY3SSRCFzJV6339Xu9KSz5fCFHx0Hbfz3AjGJXM3dKI\ne65Iy1fuEAiFZUiDbWAoN13XlI+Sz3oOgt/bZCe7s/xT0YUKp3sG97qnOb/r\nsGhRt/6Z65+QKXmEJeWWyc3uYbLGh4yULF9qEZvIfOqw4fqQBHIGjXxliIf1\n4m8dUYihq6aovrY1DOQYU2wH2I9bEg/XJLwdp19ocHlsXaL2oa4btrev/NMS\nLSNPKxzplCtmdwHRPNxCAVh3GL911XI9NjXCMTVdcxawRPabdSpZztSQe7TE\nv4kWwx9WIN3m7vDliITfkeNxdX1k0pDWMf4XrPmK2MYrHaGsI01w6ACRWh4F\nsb3o7NEf+HzlgNb9EZKHEuC0fQDE5olljjIoYMZ5dqi3HL5vxXc+VxBY0E/g\nbM9xc0Neh41dN4a89EnZHXSmceciPdjP6DmOmzH6fxzQ4B5GPK00s9WEeFRu\nBFrn\r\n=9ekE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeHd7uuwY1YKZaiC+ScY3FLngcqM9sKAYFCIrYJD7foAiEA8qU8dsZ+vZqQ830kDJN40DC6DpqI5TLEUrAkNvizq6I="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.9-alpha.6_1573405747399_0.5389199408791039"},"_hasShrinkwrap":false},"0.10.9":{"name":"@react-ssr/core","version":"0.10.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7e38e8560dfc94442af114bf81ecd1ad1456dee8","_id":"@react-ssr/core@0.10.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PZRCcxnWkwovF4C22WXebfVeEHK7oPPLLsdUDQ0vK42LrTCBlFSSgA9+XAaHQDHb4NAppwiuWngzgQtc2NMRZQ==","shasum":"9ef18b16281238674d48e4d2784539cb8c895be8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.9.tgz","fileCount":23,"unpackedSize":32708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyEVVCRA9TVsSAnZWagAAv84P/AraPUDnyphJewEwc9KN\nybrdLS59IH7VTHKx4FURPtNXkOwoXoDy3YSnS/xccFVHlTVljkwFVpZ29jWm\nCmoEiItWjPtsvyLcKwPdQPEAiMrb0IvWgduhIrYTXBPWxAVbZIkZelmx8AGO\njSJ1X0tB27CPeRX93Knkjyt5xUMwgQg3xRCOxCxSA/diVSACHYsC2LN50BSq\n1m8QtJ982iriaYaWitiuNwcKoIzmBQL2DZJtFYqfEE7seibatDQU8G7rsBGj\nlLnszkum+ADF2Xndc5756E8z+LveqOJnu8ofnWwJiSAZ7/pTeZPa6vb/fjAn\nhSHY7t4ESHgdHqtNb80r8ahXSji7fxbUIe1eMKRB00kUC9NrDl/aV/su6Foe\nU+ORyZ73VNKrhjWrLx5OOmr4xQHMXIzZlLW4EYcV8SIlxNtpf788ehAjbmOY\n2DtMccs9vir+IKXuA2GUiHuDrsTOzOEV6AtI6nJecdkLvjrklC1EiCS4TojJ\n955YSQxvI1ZtP/Om+VZmNtjjjGg0B9qKkXnwxx6q17Uc4Tfnn/Gd4pu6P1qF\nMR1OwJa5TvTzQmUpldhMbHXl5WS+OvG106pP824Piyy+mYoUXKEWN11/mCeO\nmVySvRk4aXkoxc3txt1bsNmljkKwdJapNWMQx5Jb3GgmbVhByU/f/z8c4dlU\naVQG\r\n=DD55\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvzFFaX5nvfp80J0ax10An2xE7MAc4yUuGlcy3/KLY+wIhAPHlL20JOQ+09zuZvj3cDTf0b+hh92WwU/JG5XCAZ/Ww"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.9_1573406036923_0.9469180184280341"},"_hasShrinkwrap":false},"0.10.10-alpha.0":{"name":"@react-ssr/core","version":"0.10.10-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1b18e2826d3af7e44092dbe2b760c914680f445c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-vM8r4yniICYG4ID4TtwDhw+OsAaXUMgfIOPXegrp3RlK+UJ7OLJ/IKChIceYHt1BexJVbmp/oUpoGp5htYxJPg==","shasum":"2df9748bda086eeb2a0ff002194fb120d50d7b30","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.0.tgz","fileCount":25,"unpackedSize":38986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyFe0CRA9TVsSAnZWagAA/wMP/1m/tjr0X8kp+KXlEeCE\nkxYPCUDQiyuRCc2wzjAHBZDoLDRVwMRvrW0ziHd3Lmugfa1u5IddYLOpq7Sd\nN7w5FlnvL8MdVJ15meG6d6OLKvkc95mk49SjZ3ZacPDZ7vO2nBrlPlNWv+4w\nNBj78vPuM11PEoHZ0g1aW+Q48mjwxFCfzUIkIICh8KvFE1yTheA8Z08xBt1H\nmStt/bZItiPJZ1j3f3KkKbHISQX5AIw7NYfp0guwWCwXa7XXQ6Ii8HYTVyMw\nuwmtt/p4z+1TIbtPcsGDPlOd4+12JP1FDFtTA2L3wjOEs36o1a9YYQ2GLk8z\n3IAywCoB9ARCF6nhH9aY5s2qOZUCvqKTIJIjJgYxTpFUJoXNjNSuZHB3rmVY\ngXfGV1EGFF29XjCLdajAc4zIzDSfwu2S5RVTa1yKTfCmmLuJdhOJmZSMkV6g\nTDZhML6JfbqIhbbpuhLp225lNmPQaj6LHO7E6JvB2lvqePPaV9tRnkfmwN+9\n0glXZ4f6TrdVOnYLbN/YghiW86WeC6ADdqhApfkqxS/n1SCMX/fd3X78UonV\nBs7lfeQ1uMCZPKyLjIIDYG8yGy7D7sHq4dJv3mZbq8Jr93c7FeDgWnyzcTgb\nXcXyBlyLnAiiNUnHTMrVNZaZO+QXpR/j6pc691UfYkmrrP3dnVTk/G193Boo\n81Yb\r\n=kMi1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGVXZFpBznAxgfCJymNnCweQKLQmG200Df0H/8OmZvFAIhAPyLRSIYqMPLHxPaRIuZ1C3UEpBDWSNJgHpr//GxG7KY"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.0_1573410739846_0.8921927292280016"},"_hasShrinkwrap":false},"0.10.10-alpha.1":{"name":"@react-ssr/core","version":"0.10.10-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ff9638acec52c39a02401d77f4cf1281d00880c4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-0H6QiLeguHdTQbL+8kJKuojtz3BcoehoQLT7uEYwpsRh3PnDOdyCYv21DDS4FTk1bwfBJ1WJ2IJhoyDFQ/054A==","shasum":"4c32f1b6c63c844d1e44cccfa9d6b37d7975b512","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.1.tgz","fileCount":25,"unpackedSize":39001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyFhKCRA9TVsSAnZWagAAkmAP+QAk3uarLM7Wkik+sd4p\nAmlmuB7djBl9l9DcTbyNBdoGy+AN5eVNsa4uzv9z2BJG11QW33e04BkrKBaO\n46s8T1YmofCzNDpqdexU9qPxkS9S/L4J/KLDECrrrzFcyhTKd+AdKWiHTE9G\nlJjcs6tKlgFEU8sgtDyGhgwqvgkxPaRY86L/AsFqZIvH7pzZvU0KRUPLaQc+\nfxVTJOObz9iLQMzT4sVRCpMNBUl9YTJOl5/dRfvIahwrKx1S06qZRP2QwfTc\nYpA2O4QaZKCg4Nir9wPIpeuXVmkGNW9ULdLpolYj963v+ZnKDlBIg40FJ5d/\nLYHjOLnzq66vTnS3JkenLg+D+jAELaRL2Mb9MUdyOm6ogrzxN2oGqU7wTgY7\n9vmSKqqD/jZcn+aRFI4cffDiWFc7RV+/0ydmnH6FgSylF7kiMUAgm/lID5PP\nHKsVo4WE3kPtD7x/OeHPxZ0PchMy7EQpkSHjGNFZbt/lYMmcv3HkW3zt08u4\nx3YtCOKVrczF14w+cuyd5JZM+ZTgFah3UqMy3iwa5/ghUyUEgZ7EVTcbwDX3\ntunYqQdaw/IX8YJ3ulRQpB1YVWwNeuhrZe3+tER/C9oVAwzxDmTsYc4kfjQ+\nTGqmY/sXCtDzMCeMrBxyQ0OWqx37+oYT3Znc7jvhwBFTQnLEIkrKq64ivcLc\nSyyW\r\n=f832\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpr56SmbTmsEAbrmDPuNGyJffKHYY0GYMb+xW0tjWm0wIgO3v4oO09p6YLN9vaReRc5guknF2JC9+Gn8F6XacKOrg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.1_1573410889898_0.21139745496564855"},"_hasShrinkwrap":false},"0.10.10-alpha.2":{"name":"@react-ssr/core","version":"0.10.10-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5c96ba73c120f5d149cf7255a50cd0e5e9f77970","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NFAOUEK9f1bWaKyA//9gYX54DFHxTi82iZ2V7LQKF0TgmRRYfG4eMsSJJK2xofEMWehNmLh5XtzRQbQPP3qIuQ==","shasum":"1c0964b1c3b3f0eb2021b17ed33ee88b37f287ce","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.2.tgz","fileCount":25,"unpackedSize":39027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyFkmCRA9TVsSAnZWagAAKo0P/1hlMsBnbSKTu9y9Nl/Q\ntMiX9qoiqsC4Zfv5Fqzz5YpxtIKKkWAd9tM3u2WpmIB1KHnq9ZSKL2OvUlDC\nAKcMhi8V5ziQaE4GjxrMZNOhBs+9p1lkdvVd0/oqrpvfLgVgeud3xllsg0Uq\npgXFRnXNWhSIqQPkBRMUEkEGbSub/hAklURJlydaZcBJRhOQ9mDbxFtFXWq5\nocOSBHjxELEvqyOMppbB2c9x65sox8LAcqNcKdq/6InAAfsevUDOChHh8ZMO\nogCnrU9hsoNgoDKZ/jVUwaKvnnndpf9CzsSnpiVdG8NVS7c/+ASpRHur31RM\nlOb4zhRNcLHkOmIsYpInG+0CSl4pW9mqUffBN1YDFF+f0nvwnCy94eDE7Cfq\nG61LreNLg1o5JllSQeFe2qcot/9q2xu4HHhdoHzwvMoKNpp/caxE0eXpaQ3j\nTi2jKypcfgA7HMjGPfjTef3/abWr+CRQfF0bLV0DkhimhTzanfy0TcjTK4fb\nOnQsmmmOh3cnzScxpoBIDFOXHltRqIc6I/vSVPif3RSZMBm4akHePKqp6/l9\nW1ZiSYVsWm4wQuGbWgE6q5ggoL+QHf8/5d7EOtnjwgBbulgz4/DXwydQ4AVb\nVV2YXtjO0Oa09+IY0bGqR7+4tX2V2Hq08MBiHT76wGlBschYP7A3oz+9kDgp\ndDbs\r\n=lZ3H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEhYSYN8VGDgRhG35GcdX7oGNGDBv8s3CfgkNf1No+GAIgMEHeAbvZa9Wnf2D8DmsaSEfLKiZCnWKLeRwoOn/lxVc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.2_1573411110423_0.827891732918058"},"_hasShrinkwrap":false},"0.10.10-alpha.3":{"name":"@react-ssr/core","version":"0.10.10-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"41cecc0cfb20b762126c809dee9b8522feb16d6d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9sm8VMHQrFpUuclzxVjZSxJ2wYHn3t9RAo9ilKS+q9wg0zBVTeCFYNSPtFG1lg605OvrEcv+ZaQ1vngvvsTBMw==","shasum":"5df7cc625306ec0ab661c92840c1096aa61e0cf1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.3.tgz","fileCount":25,"unpackedSize":39091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyFlfCRA9TVsSAnZWagAApYcP/2i38PPPeK50C1bHkZdO\nhRFqYC6DDRCcl/HeUuwG2PjMu/XHVRqGIK903nG5b1H5H0TBne4TLtvVQg71\nmRLJ11j9Muklt3K4jGMJft2oiRz9fdlCbcoDcdj66nJ4atz466CfJcf0euI3\ngzSVh8VhJrJDwqs+8dW7DrzDn86QEtH7ANsm5Xv/nvExuqtvU19aYp/TLkOR\n/RPj0JYa6BfhaHcaAbiVG2SuG+Ms+GZg/8A8KlyQDRGYm6rWK71TtCdAxSML\nDbmqisBAz1dhpwkB6EuQ/pqybfXDH9uys22mMYxdr5P6hhqIgvrUM4HG6OmE\nvytJ2Qz+8EmF812b9DHIplIKriaB267rsr8004lQBzmCWkiu142Gza9lUf3l\npmRBCOhN4ai3ooRy3XQQ7BWNZJiJ5c9CGMzhBgY62SPitTPvTfP3O9grUv7k\nVTtuR+r+jjLES3SETqfvx/SNwBV/VnK1wBzsDKulzxBuoM426ZeUNAul6x3X\nA2BtgAunoQVb4B3iHPUoXV8O5hskCekqnh7P0HF6reoFQi3ySsrSIL0varoZ\n2Lrhbh5jENGdOJwCj8kLSy0WVYejdcq/3/uaIVC2FgLa3GPM1oZJti6mmc/5\nFJWdPUKbRSkq4lkLwZbIQH33+3LFAL3xK4kr0NcRsnnpky7jQOVmWJASVLoM\nVi2I\r\n=EuEI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICX0FfDLiUU+3ujxhTgFMTBJSDlDKdZaMgPSR7UC97xnAiEAlnpR8YILm5LSjJsOojzN2DgA5t+KnWo4gLYEccGRCuo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.3_1573411166718_0.4686974847750802"},"_hasShrinkwrap":false},"0.10.10-alpha.4":{"name":"@react-ssr/core","version":"0.10.10-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a9362eb4ffac25774a4e250a0d1d3d45446f1821","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-4NUq3J0ua7LeD4f7Sfuk5n6ajc+xDS9yDnSCtG57d/XUy5set7uspLXKsPbSNzmQVkEnTGuDYiehVkPpymYczA==","shasum":"a1826819509fca90e33930a6f225e9707bcaa3ab","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.4.tgz","fileCount":25,"unpackedSize":39111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyFwPCRA9TVsSAnZWagAAMxsP+QAi1RHa61YYQo+heep/\nsuV2nnQgKAV/gFMWuQLo0CwKjTZl8YvE1IpovwZFctVUX2wwWOjq1H1g3HVo\nyEt1t3IG6Lp/RMkTnuELuEm0jAv4RAP08c3PUYkhwXB+iAd+pPP7CWlHLLAO\njz953j+WMNdw+L5FjUvzCow140Q9NBIvW8UmK1evULM0VFy/hE1EEHu7a2Sp\nPh498sZPFcBaBQcZQWte3qq+qjbmCy8toqzd5gOS73syobQtf+Pa6i8VE+da\nqicKHhKaU3iSugzu+YcMcmnZ/M8cenmOFg4eMGhx8O5sj0Ak78i/j3TpYcgX\npD9o+2ZvDGmWybOcULMEWSm0BDVLh2VqJK0RhBSs290JvBLamn0xDKICOU/e\nk09lq+8K7IAZOe8F37ENmIJcgu0KI0kTkD/tMs7/ULc2WYTV7MV3OMXdCnRB\nzajgxGZplxQazXh4iiM4NE0+JCVa63OMyn5vOTfDtmSdhjpTKP1KYovK1B73\nUG8D0yrpoxXd31tJS5FArJQSIt/28WPO18Mc/pSc/Wm3scnTH7abPQYN+w3y\noJaXMxPKEZ4050rMyw0n1w/abwF0fYreswrbqi60ysU/MmMzq497jwLgAdtH\nG6s7Y7XatjPEHRMVBUgC7QOdmIX3BJY5EFN1PHezQmDbEJflpbyRvWNWuFnB\ntgZl\r\n=cOAP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxeYwswWU7g1xMPct04/A1g13B65wduTASC9SBaNWCSwIgJ212LNRPlU0bC1YMWuKnc0o5ELW/eaek7oszoKIo1KE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.4_1573411855209_0.8463044808619342"},"_hasShrinkwrap":false},"0.10.10-alpha.5":{"name":"@react-ssr/core","version":"0.10.10-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a379df1ad38fa2bd3bbc683984c852dd069839a0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-GfwwIqKkH/OtTmAlJfVsFeBAO8zED9ScGleEqvZ6grL4X4P6Foa43XqIFKMXdPLPRb2hnh0y2nEuZ63A3WpV/Q==","shasum":"934dc02608f9d20b9c7d4e86f8df76dc50bf0c4d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.5.tgz","fileCount":25,"unpackedSize":39393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGUMCRA9TVsSAnZWagAA97IP/0FnUCoEr6E8x2qrnL5A\ngCnCZ3XvrbZBJ5L7KQEjAlql0Qb7LjCbxZXsJa/DoO23BV+OZYVLERoQ6HIG\nYXQPFiiykOqlFDimvJPYQerQFkJb1qsvTJEsXQB5MyWj5gnM/i54INhuZc+M\nM3BT0+egPVjBoDoehiTLpSWOY7T4SMW78C1bsdYGBsktsAzzCY5LniJivR2H\nUAgW1bT5p//tqJi8KXl1B7zV89rta9WnlFRtK5JeGPiSaq9gIyNmCenNcI4b\nOjyjnbW5gCmNYzb5m98SfacBrdStRw+LYbFKXaSYvV+uDgzWLGkv0hsfA0y9\nWoOegBR+QM1bbB1vE4GfD8LEL1QHqFbaP3oDpduP7Std48HDkzTRY0+PSsea\nOO2yul00Nffoo4IH95HLvMBqjn7wRlR38D8Tc/IVY40tq6JeyVnGTqUNQu7r\nesQYany2W8LlQuHrx9ZENlmtNxE08JPuBTlBAQiP+0oHxDaS5kHFFLTEoEp5\nloguMH24BjZXvCW6FN4L27ElzUww7xT/45yzFBurC7XYii3fdNLfQ1g1opD6\ngs5/JrUGDysAtthrlfEcuXgQBBq7pNflNyro4oigY1bS/zywDXlE+gtkt9S9\nSAz44OwGFyJG6D7rhFtPOcyWPlBiSB22/ba5yiBgTPrWoOTb0xGiS6vFr06n\nBPw2\r\n=OKav\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnd6jwBND+G7ozwQ+SgdkA+6PxL2dGnpAqly0NWoV5AwIgLaGmzWzlL45cad1001pIv4HW98hKJeaFsO6g4gnejv8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.5_1573414155998_0.39984947285926564"},"_hasShrinkwrap":false},"0.10.10-alpha.6":{"name":"@react-ssr/core","version":"0.10.10-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"30779aa24ff0ff945ff7fcf13b6020b06f067b8b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FdxDIn5pHs5AZTmVGdZH4yrYeWnXLSjNl2HyLfFMhI8B/IZLYXGS9PhsBMj50xJ7OGqJDQ9Nh8beujHZgSs8og==","shasum":"0a98b4793df39774050caaf8c76e93aedbb0f9a0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.6.tgz","fileCount":25,"unpackedSize":39370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGXtCRA9TVsSAnZWagAAMMMP/1A+zmGDkr0XZM8hgheM\nDO1H5aGIzcj9pd3fhEDmW9Rpmg6UWENj4Di90028yGsB3su8F/8ECHZmfF7r\nJX/g2mCyi3tMqwQacgz9vppdP4DoXkN0X5xjkuug/Q+L+1V2yvj9ZKjB1mfF\nWgYioAAqsGLt8kT6KcFWqjgPS8AKLL0GC6aMlVKP2ykQKhoYARBN4fVQFCjJ\nMQvFBPlWCVI0bK24elY8/iUVTrO0tLJEFhmhifPebDknRUPOrgyo6Etf1Q9n\nwQANyr+7j/eTzd46Ns3IAB1goYZzbGRaajMhK4zDjcUDa1L+FXwuxF7kZYzG\n4oTQgey6EyI6Fsyatdq7jglWZRfhaCbXLtZtpSypNmtBBVWKzZIeHkOawKU9\nXDMY/9oKYhLDZnlukILj0EaVtwFRP+7XjxUJ0cx0IaPl/3FIFRHF1BPFUEf+\nyUcPJYmwJpfjFZzaaaS6KNE8RnOWJBMmAGZuhyZHAEk3+uZ8u4XRsYpnaGyP\ng80X7y0qwhEo0KgHXfnldhjbL6EX7XhdFU1CxVhQUAwHhUDYU7x4ZN/NLCf9\nMGsu5/IxmLXqQk192iU7jgDGGQDv3vuQRj+lgbD+mRuMW5jmbOfhf/ltzDLh\nd/sLMLSyblFWc/1cuvGAcCJZr6RtQtB6ypTkHAMlxTqlDlVXctZWU1rLKYaj\nsGLH\r\n=CQHF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxe/tvbUbrT+WVpk/Qb8KxJkKKvcVqTIMQ/rQjh9zSJAiAMSaUNauHFiYInvHVwiyGotoYBd+djSeyoLbf5njQO/g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.6_1573414380669_0.7005847970181427"},"_hasShrinkwrap":false},"0.10.10-alpha.7":{"name":"@react-ssr/core","version":"0.10.10-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7115c11982436e850e4097f3947c068016378ad1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mgV8ueLV37IaEWETS5vTyvQ1HUX2/4Hx8c+GKZs3AOLUtI7WNdvipqJA+PlyXtDSRNFusKt5RJpda5xJTdkypg==","shasum":"23729c4cfa69969bece200d15f4d192b07608686","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.7.tgz","fileCount":25,"unpackedSize":39489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGbpCRA9TVsSAnZWagAAuwYQAIG5pQJSKCFirpYc8rGV\nAUY+honsLeAU41G817gnucylDgcjNKod5F5wPbZesj6N4DCmm5ZhoV1/WV9O\nSphQAtVFo9COeYD5+bJGyHSOrCu4q/6bFzzR9CHCQLcQcHjLTWmiqGa64QkF\nAf3+GDGNn471UwmjCgfc+4gMl5v+VDOdZIDAJT+9nCP0RZ0IZqf3TMSzSMhq\nDd5lAug2oE2a/fs8OLDQfn6oqOsXgaDc+Zaw7kvNRO1nM1L2nMzzdrZEsiX3\nhllzar78rWWAXabLBzXg6UvudiWrNTsW7I/aX5oQfr+qDPzZasPN4rxA1agH\nvJr8gpiLuCoGXK+7WFMuNsbrVCOx4iy8OEB0lERqliLdOTMR56ZWNVRolnNH\nt70Wr9Gh1iSmaca42F2+bYxpgKCW+K8RPv3IcY4EQrZFf6PpRjw5U9cg5Nml\nh1DrYUS4E7lJMjL8xrCItzQx5syiTG3kr+7UaCd48Wuzamk5v4TRW5ienXp0\n8/VnaQlkVJFgNKBYqm/fHeOglQVFKaM46yjbkqCB00mloBmT37jLT3ylodWt\nWUojVw2kOl1vBZ4yuazy6kJ8N06AW/yTDTlhPG84uKQoX/rvSqNVIexZUR3J\nKQ2QxEf8Fboctw7LOYc5XNg4r7kAww4/7va7KGU3+EFPqUlnRO6GETvmIOGQ\nWDR9\r\n=8ZDa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEt95nyazVNS3FksooLjEf7OeR0tvvBj408XgenjkEBbAiAQYn/7ljOOBGjZc+34OObZnHU55QPkWAJZYUYDwTVpRw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.7_1573414632827_0.7883114753505276"},"_hasShrinkwrap":false},"0.10.10-alpha.8":{"name":"@react-ssr/core","version":"0.10.10-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e6837ce3b8ead8f70c322b36bbf63bcedde877c7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-oQ5CvMQbDkjd72f4pIxaVdUSGFN0rMWIt3bNTDewtl8mMWQklfbf1NVoyVeyT4pOSIft8ZzROI7ZFFFolO5slg==","shasum":"f6c5dcd0cdea77a56a7298d5964d19bdc5e3a52d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.8.tgz","fileCount":25,"unpackedSize":39519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGfsCRA9TVsSAnZWagAApX8QAJMyPKCYPUu4dgoRmAdq\nn8aNA19rKikwwmGkmwGTCgJE/sRIrhIwd3nj11fw3UKHgoqU/2r7M7v3Yl5M\ngo0CYlnCyofTcO3cOJl9ytHXS6pDudkXcvn7bnOMdOQXBrUdFhS7rHqsPctF\n+meeWklgCyzZl3ctn4YlWxui/kwnIthGE+TFl6BUAhwJabcGhS0jlcMCFRG4\nlL/JLRDZIR2l2hzpbCKUToonCe+nj0SFuW7mu6UQg4lnJrMa6zbjQCJH2t8P\nSIenwXzIwtO/XVRZARFOrD93EvR1UG39b5/21M0aXiDPGYo2cH+Sju4CBo0/\n9WuJft/OuaUzMwe+yroE+PWzZPEwQ5WNTVJn96PXwXR/VBWKS1Z7H7QmS/ih\n4I9Prf/tniZyN7XDz4Y05NRQR7cLabbBgFPcj6h/++GoMxATFXs5ecM4Us6m\nV+amXV5/tH/dTrxfh18A+7Icl1+oNgm64PzqCVc7TT0F8ub/OhCKRbrC07OL\neF2Mpedur/L8SMLFYyMuyz2X0RgNDd40UCVrYespFKB4G0DPPsBaUoNOeAUj\nqhVwoOOah6U9x0jwnu97kyR4IpNCxV742cVl+/0/nxe0TYIVEb30IYCldxT5\nv9wufL6erXZ7i3t/DZ30J3bLN2LCF5ZpUk5iFEYUSBdZ3K0ACnGRNw2zEmhw\ngFRV\r\n=VWc6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlBStl+i58fp/+Zus2+aHWjNe1qs/QX/0MV3/5WWCoxwIhAOPdC/jL3mq8NxZvZKSbewxEYCSNZvkfuDG0qH5N4+P+"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.8_1573414891661_0.32193550056759546"},"_hasShrinkwrap":false},"0.10.10-alpha.9":{"name":"@react-ssr/core","version":"0.10.10-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"62ff11f82b76cea95a0ee3b65bae277726dd0da9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jrQvuwC8z/Y65LQpDVPQE+fNzAeBeVqaCgKIZvpspdu6Sbq20SmZLIZmNv5uZXFCwTUfom/v4o9e3NHa9umOhw==","shasum":"a041684df65ed1739ed516ab1e2e9e74e42b3600","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.9.tgz","fileCount":25,"unpackedSize":39222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGhqCRA9TVsSAnZWagAA+EIP/2jgICSPdcC9K1fLgaIW\nLO7nSt/15UxnnQFNC4/bx2R8uIXpVgwcRdyi3XlZZGrhyZe77KrCf+/+ZeUi\nCQgu2LEkmPbvBxNIAEfdOwFMaFzEwz5c0tsMXT7aZ/NyoJXTP5g3gGX3Vb/Z\nCyM7qysPjXLUmii7xEYiV0/K0U1rKF1aobVL5nSTo88BvQ5WCMwW3J5oZb9x\n5U4SkOWWrz/cYrQxRo3MMkEQTE0pHtWeN/6r5676uUKV/aIlhunsj9Xbit9v\nQ7VDBKLaIBXj5Aze0aayPez/j5hMeqZ3EiF2nUVXADC3v59gbz28VtiuvlUs\niLkGjTAhx/CSZs2zwWu2D0k9EGzfPMsl6lGMZNSGryfqW03ewAEW1JlCuRDv\ne7ydyoXg0pcfqXNMp4JNb6glrBXEQRd/z8K1fUcjlggMZuYGt06y+KZWGa9K\n/jmsRCp+Eu6UwYRmw38yUCe6VT0PDhmAU/BzRR0ZrVXjTB68amG9rHOQq+yU\ngkbhtoKe/hbzFZsoOI2vl7cHG9mdh3UwgbglIV8B8ILghgihc4VyKAwr9hnq\nLaUrqvKo7jDJEbu/3ElpYoLHBA7QQ1M3uWl/BSaypGlsTKrlnpEjRQoLdY+B\nSMsD6gzaek3HQZ3a0oZNj1wM+SA3KcLNtUjZ8R0GXrWz855qKRNXMhr4XoAM\n0vao\r\n=soMY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKKj9u6oboszmqqfOuTxS206PKFF71kUWubhcbibJ/GAiAMr3Yjhyml821Ps7gOSBM8TYXQJDkN0jEeUPDB3rLe6w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.9_1573415017812_0.9236575003682475"},"_hasShrinkwrap":false},"0.10.10-alpha.10":{"name":"@react-ssr/core","version":"0.10.10-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ac065e4eab05274cfc5cc1737a761c46d9823e3c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-rHV72MncfQk+fbBa5w1t9p8GCEGJrnkABwHXv1X3Jfl3Cm2VclAYChoF6JN13Q+7ypUCxKNM0H5M93sXpbbdJA==","shasum":"d251a8e618169637c326c038bb07ee13a14041ef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.10.tgz","fileCount":25,"unpackedSize":36980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGk1CRA9TVsSAnZWagAA4UEP/0aRGqjR6aka2BSt0T0x\na2LeMbxBiRMQn1WqYMtkvWe2qvh9g3fo7Fwk6y7Dt+8ibqeymqfKuaxcV1Ah\n0822KVfX4ADboRGz1paHbniU3QMIgWf5ohJrBlE/sZeEO+MQzaKLQ3FEcJVD\nUNT32JgIGnYMOkMFHz/thh3g3FEQXxEbnYgpS4h/aLJTZVfBK9UrYbLaYKd1\nXcEqDD8eSZ2/77UWyLxkALaPtEqspFXiVfdWDexG3LbT/1CUTS5H9dJpJN4v\ntv/WNJt5FiWKmYr5uajgdDIjSANVJx358kZwfVCL986KpjzMOHPISVMDsTAM\nFMH5lzNKk+nTWBG1nYFjbec1SYxz56DsLD9sF6fycnDuEHTQGT6b11kFUGcy\nfOj0kQcD149iYE8bCx9QiOoIN4dx1bdhnwwBvuoWVQmdblMTyQ/XHgYE+TXe\nnVBxQByCK8T1K4laeJqQ/DDvfzZUmRw/UhhOBO3KKxdac672nTSyY0etbIQY\n6dPMaa0CghEk3fkEmIzHHxk4C+vb1KDWN9skE1RZJQmYeGl3dJK6K+ZEe8m1\nFbzINbQkXCyiE4uG6SOwlXA8Ed7p7IRdty9yeQJLOn8jYQz4sl+/X6Nv0RIm\nOBeE14b2RmpG6xWRH87WVoA5i1/QunYaT8kLd6lDX/F+LAVCeH3uLK2I2Wy6\nIOJr\r\n=DIds\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1ZMG+pQ4iijOED/P6E5jeSEgK5wFaYZ4C9+qxhbOx4QIgeOg/SgfYjX8oz3H9dWUdoSFiPdbWQL7UFCWNI8uAlOA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.10_1573415220928_0.0666764283598591"},"_hasShrinkwrap":false},"0.10.10-alpha.11":{"name":"@react-ssr/core","version":"0.10.10-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a2ccf6ef0ab82fff4b2f0b4c9839012f1226fe2a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-faQpOtfKFLppmjjWeWCxlZ3ZLGcyRMqsRUIHAWww4WCTvLOGNUa2jHxosOoX5LfMX253jNjt5ptc/Y5ukbVLJg==","shasum":"e68086492fe52de3b9a0439e8496a6070528be7b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.11.tgz","fileCount":25,"unpackedSize":37112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGnTCRA9TVsSAnZWagAAJAUP+wTKl6t92/kSgEKbZIsf\nlPmWBKKOHE9gjJpJs6u/RTxA3D+yMC6C3PFdmPywXxKljbJZkVo1LOlheyaf\n4GV2uAa/F+Vm/PO112SJ+efWwXt6gzqiaF5CvuDl1UE+mIu91odvJrV12g1V\nkVq2tx4kwZtpg1Of2MCM9z+gtp/c9AvGV17hn6kz0q627VWBC8Iud5vPhDXh\nOsW4exf4tjRWAmXQ0/xw5bploR5Z+3Ycf5e8PqQwI7ueujr2svcN5MaFtAsC\nAKwCOY+V1raEbQYBrhuUpciGq/YI+4KMDzNUUAzGFSEZIv44wC2EWhPM2esm\nucy+zBCH7/yAdtFzqtfoc8H3RdPX+eFuBVF6k+eZqWo38lq5AJrFXz2/ecz4\n7lmOAYaIi8w7QqXhY4aGFG8R1Z/8sUSCOEVKfUQt0SF2AVn+O7dbT0hMTjGi\nT2COkEzE+z6w1gSae7t4VUbkt/+il7E2FMK6jJn1leTCHyG+pa26WmuKaglo\ndUM+HeC0fBKad7d04lUw7PbKl3hvMhCjbiSNx1/6qPQITd9jm94KkGYoOBBw\nRLx5ITbTlhn9Hj0l3HMdWQEF576wZ526NfiPgFb5TVZD+FuAOM+Xt51prAhC\n2NtMPRk8yJBhdNxRmVzeNhk2lS1ZKz/jwOgF6aCXTZQv6gahZ9DFugLwl3qz\nGUA8\r\n=88rY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1tNMT57Kc5VlyG5kAGzL3m1zhtnRsy6zN8/Moaps00AIgSzqpu0fs3SDtDCRmwvGO9ZVg5m/SOUI5ogz5detVSGg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.11_1573415379406_0.828534314743459"},"_hasShrinkwrap":false},"0.10.10-alpha.12":{"name":"@react-ssr/core","version":"0.10.10-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b9e2e9165cd84fb4c442bb728fa302849767190c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TtGBShTjZpQMBJQS/exOsyXEnlDdOGhMMFBtB4l0lUxpScQMff/PcpVJAptirLGxWOsLdH5dzueISyPPXIclHg==","shasum":"f4e931017691a4e90c753e8251cc6e3bbb94abb4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.12.tgz","fileCount":25,"unpackedSize":37144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGrfCRA9TVsSAnZWagAAlFsQAJy3yn/64WCOoxmS5+13\nr9TWDd/ag7bM3Srbpz78qyldQmNvq7SZxbAkR8J7McFA+wG83kFxYOv13GOt\ntlA6n0tHHxEmZl4FIdpfh2ltjxPA0Wao8Q/S+ziRGnw6xqDEhr01bglFPbiz\n5Xq+BMG9bEQ/IhA3ETVokFFq/YYzvEcinpqmEu+IFlXXEoS67KeK9azB0OT2\nUFK0nauD1DwOYHkCliJOW4L/SV/cPeICS98b1S707b3tERRYZCVu8kvFgWnw\nhtHrrbqhES9oVD26r5vi3dHY/3C3v0ngLGCVgAhPfbZDkr1mDO3jhf61H9xx\n2XiHa1z53QI7pex9AuYRUbpkkzI86SDXf2cahXc4/7c2M85Q1TnuvXFh2ozB\nftLySbQ02jF53I4DpVeRYRsDE7mJM+0wVboh2eaffcFGss+Zj4dSMxBgpqTW\n6m9Ytj/NuNTwDYinPoGcpE9wxIBR1uwWPpR0aQnkbnRaP/JmQabu6tXIiHkH\nMqEOprtJ00Sh9SRMCp31gbhmVuoN/NnCL+JqjgW1KJrJDqFpk89a7+fgOVKU\nDCM1rJM9AtC2EImmVhRmc3JNkRYpampPF+Urr4P9rIElypaVv0RvQsGGibJ9\nz5ubpSOVhKLrtPTxzVk0bP6bUFI5IhyKFbnBPm5yz2KD61JDXieMP4l8c8h/\nTNWI\r\n=l9it\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZXY5tbysjlH7zt0ZngJXFRGUuyZAoSKAj3jqxgabxmAiEA97+Np5eW3c/pNpbmFVAn7a/l0+W2DNob/3KaFZN/1R4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.12_1573415646997_0.15763838486716297"},"_hasShrinkwrap":false},"0.10.10-alpha.13":{"name":"@react-ssr/core","version":"0.10.10-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"09ff908f9c2635cc9a5db73c4dc6f65f7b07662a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RoteanCOjC1CwRAotsDvbk0MPcXea0ri+a8FXmrODpZeXN0NUvSbO/CyKw3BQiy42t2AUAh6okSkEgU7t/Eifw==","shasum":"a9ff4c9e301d6b8a238c94c979b19f3719919cd9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.13.tgz","fileCount":25,"unpackedSize":37056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyGwcCRA9TVsSAnZWagAAMlIP/jzeE6PqQ/MClVUYflJH\nQ9Th7/qJq4IhqfBwfEAc58vEQuyJYytuAu6hCR/CB65WVRgwvk6G4E/bat4f\nFczOcLCY/qV6Uj4Zmrp5QlbKrTumvi1VjdvOXq7LpIqkdYD82ZcZcthUs3Ca\niTu0fPyeVmVIscZiTY7YMv5Ut72gkn/nlwYTYoPWh6QUVl0Dwc0R9dNLC3Cp\ntF1Ta4WSvT3ki204i6iK6oaTm6Yf4z2gAfvtTNFvzzydLeEMLOLN0WGXxi6M\nYj6ZNwUS7gvqbW5il5IeArHkATTDiaWYmzhnBWxJx+QfhhkDnfWd2HNBMV6+\ncjatz5TYC6UiEeZE75r/CGop0GSdU3c3JwhNlbmb6RQHuludC1f/htvoEDJG\nWwuXAxtKpembOfA6DUQcipSWWQ4q0b8JcE22LL3S0esq9g47M01++HOcyLuL\n20eNz/JcUppD1UeHfUq9JY45QGT+FbZTxo+j1tsv0FqdcqrJf+tU0lhoHI1+\nrQXTiL1j8QmOwfrQ30lB7nxpCFIGpx+OpgUm0V1H3CBqlyLMr9C+oVuRyMhQ\nEsXOF1wmDPlI4U1xwHK7fptKTttsasoZYfpZVPQMn4LUBOe99JL0yKphr7+7\ntkJHPvJ/9nzALTBJ00tMpmWtxo1TDWOORc4gJHhcBsbMf+DztRD7DhoeNndn\nMqht\r\n=Ij9+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFPNBpbK34VAGF6sqrr5ksrHxhgLT0pELyugwIAyAJPSAiEAiQAAlIhBVvJIFXRlKfwvGG0g4uC9p7E1XjaT8IJ3rXQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.13_1573415963574_0.7178105194587812"},"_hasShrinkwrap":false},"0.10.10-alpha.14":{"name":"@react-ssr/core","version":"0.10.10-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a5a684a13b716227afd7d8487c17846fadf5f909","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-W7mNkQB8pzLodeJFwEOgNClgor3+UQN1Z5+CDsaoC6SCdnLUhWuA15YFUU/R9PfBNFr07eaLrVLhjdLLLf5+aA==","shasum":"9518429965f097d384263c3d7f63ebaf976bfec7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.14.tgz","fileCount":25,"unpackedSize":37047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyG2BCRA9TVsSAnZWagAAHwkP/jkCOdy6OY4NEDHXYWtv\nrWc+JtCqWeLz8gGtiYRNNdcSmlUkN8wg6bCqWLhU66CLVAnWMGIfzie4f2Kw\nnN3YKhN7kvKdVBq3gMp16ARLS85++jKT990Q9n27NOwJb4s/vi8nE005dIhT\nNe0FLA1PAXH7ZoqAodlrvrZSyPveTDSP+Ha/7tU2tkZrv9GK8b8YJZcmtK92\n2Cak9+iU6CuxYpB1O+nEPgliathf8IJrqtezyMBJupI+Jj/E/TIiyGSgfM5d\nlD7+5yIjaI+Pr+BIzJ5GvvcW/g4/0ZbuLWQFT0+X97H1r+gpWDqZrCBuBxTh\nUJQroKPBmW9YrbOcGXzmfaOXYzH+pHKOcqqLupJcBnDRQT/sILXn1PiOVlra\nDX3p77rs2tp2zoOIZ5horpY1sXUaNaVcWLT/eDgsf/HxZxtD6awFskJBjuhT\nzr0yyudwgjUZS7chEdoiC6uBwG+ieU7/048RAp58CHhskB++s4WoAj4D0BOG\n3vCwNRKKZQXDDNQbJdPmh445d6FHzlPQMOyTqXDaVhe2bLsJAzIS+oycoc+O\nP5sCPNpEnCN8jA7Vv/+6zciHr7hW826wQERiYOGQ780lj4JSyVxHThZtW6w/\nbC045OSL2l/Tx6MGCpi6ewM+h7Tb5ymnDo2p0cqpWPE7zKscFENLthyf900V\n6ygv\r\n=7u9x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoFjQmI9hxJ3zYp/57WbwRC9/HwLVRoN8KX1Rvs9wPcQIhAPj9zGeJPgiIgk9ZIC2Mk5G4esSiJJpW6MvulusUKUSQ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.14_1573416320845_0.38766685927672406"},"_hasShrinkwrap":false},"0.10.10-alpha.15":{"name":"@react-ssr/core","version":"0.10.10-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ed59bb6c10e3422e03169200060e7a78cab991ac","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-KsWySsxj7FehPwrmX/pbj9l2HAQaSZI2HvK3nPOnLSKt6cE+ogHyqphufanOvzu462xSiKios6iQOkprxlfOkA==","shasum":"cec98240dd40531fd6029cb12540b7bdfa109742","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.15.tgz","fileCount":25,"unpackedSize":37015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyG33CRA9TVsSAnZWagAAtigP+gNfJI0g0yrgsOTQbt3h\n/9T56VGY3nr+qgDybvAVCOEXGBCDSApTJ+z4NssUrUpJRisMPt8dKwF6P/yy\nC/7T/XevAezgcEvgfEEK0C+LFKeCJaj0CqDIt0O1MeVWjo6HC0010Hw77INi\ntgVh5FT1wG6l2SR8jBWVMUMB6mhfGEcgsFQ+J6Hy5jvtsRSYf5jw9KPpn55G\nOYRgRs2A+0KJiNYza60k1jqNzWUzBIfbPQ10u0p/EHe7Cqe6z0FzbGDKTV0W\nRDOOXUtNAxHMwmaXbHPzXhQJ5RBQJsG7XdDHoPHUdtHlet6RA11iJeR7CSKR\nVuSZZsCL+RyuZRm8KfVvFS1ODl4PF3jXw2Oz13yDbpWTKxImAqL81GXHBPUP\n28xNx+9tAYBMdyFLTQwTLzeOBcVgnttYRiT+XcdrzP0D+1xe2GqQLNh66GTJ\nP7thGXBnnxJzEpHfw2UELIaQzDeCqh9IeujY09W9ohMGFxwcjEphvk1l2AO9\n46UYnrj1fL+8/B58PVY++JqmZdW6W9ismbHmvHogYBIgWGjuj3frY7+uXgry\nu5+43VB7AX6asF6L3yWoYZts2918I7MoVIqGHBgis2BefevbvBWAeqyrvsPf\nY6mlcBAGTnu7EBnRxIB1ndIicGCT7Bok/i0Eza2F6R3z1gM45RCpw+fbZNFc\nnrw3\r\n=u1i1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsHWlShrIDcATUgtJ+EJ6IW/ogLVrLojd3PGMOd5o7RQIge4Ad9siCenMiQ61Tzmcksos0F8fsWKcRB40tItgKLws="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.15_1573416439085_0.06686773018063463"},"_hasShrinkwrap":false},"0.10.10-alpha.16":{"name":"@react-ssr/core","version":"0.10.10-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a3f5deb1cbe9b5ce88801fbbb78311dc24c6a384","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HYUUvcQD2zsK+i9kz04/JOhmybYJbVJKMpvw0F6Cl4xCNezHUtqH2NOrfyeszHfP1ORn9U8zzXsgg2gY+3HZvg==","shasum":"640dd76fe226758695a640f488b7c1b538f21fa3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.16.tgz","fileCount":25,"unpackedSize":37007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyG7yCRA9TVsSAnZWagAA2GUP/jH4rK5njTONdezJHrai\nTc4oXSfT5CQYpAikFwhSby98BOvCrmtGs6asfRfYvx8qS0veF9ZxrUJgDlb6\nppqUQoUXhAzeVF+Hg/6S2gED1nCa+yewSwvEs5JsxIGLmZG9J2J2Ebkkg9bP\na2fqtaCaGvtj+I1ItwrS6t8Tkv1g2mM7MERDKorhwIW3ya03rk41KzFWoTPn\nJdT3gKhk20H/NKHTlLk6JTCd/dTbNWQkKLn3CoQk4LIm3CjHvWTrju0m+9cP\nL3rfobSNSYkvAH3eLUoeb7or68S8DmTotTduRwknyNjnVXA+pG3lXQ/hFHpr\nxvt4JmEM2q3EFduAHR9sw6sH2j0EuOBSDB8qp/gaJ1SK78kHuq4GPPooRYWw\nDR6ZO3PIAQFftkHUTIR4HdB60wv9k/nZ2plgVQ5ErypzZAuWbzIrQj4cu3wN\nbejIFZwjMsnjFG9/AkFvL8q3YG2BAGx4s4Ik8WOCjYljd6PUjCNcT7nI0mPy\naqSyizghEaF1aQ/cr4SMJpnmdcQRUJAZja61yTng18KNYugKVqZZRUOgSABV\nBEvcqGKyudtB/B9/YjZXFp9QL59ktSV0tU9qDjGEuOAykrgE6aXhJYUXB4St\nOpSCrpPZWge1jmvr07UC5BA/gULuWwZk/P3HUd46aXExeX80GtyL3KDLm+76\nwBoD\r\n=nuzb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH7AMgakF46f4gO6XNxT48FtyUPlNTW+T+Puj0m5Jn1QIhAME+mcfKEKbf3/mKIVSoj5gO8YWRZKKVIl8kzeZFmy59"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.16_1573416689561_0.520556105733563"},"_hasShrinkwrap":false},"0.10.10-alpha.17":{"name":"@react-ssr/core","version":"0.10.10-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"79d244dbb739316c960a9eda1cf126f4100c0de9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-62nQ3gHGv6snDcK+yjIUZz1Vhw+VH2I/HtbB8Po4gWErRFSmon/q7fmoOdl3Jhs+EL2tBGL7LO8dh82O+KuaYQ==","shasum":"ccb332f043a00f443bd5bec657b41f12fd8807b0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.17.tgz","fileCount":25,"unpackedSize":36965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyG9XCRA9TVsSAnZWagAAdsAP/1jL+rSqpA+1lGuxvbBW\neHCEXlt1DnGE7eJhwzF00ZahT930UrJsGQ7j/Y9ozbhsS+TYl/YKcBMIS5ft\n2JNPNov6ehAOXSK9DGD6EDCC7vmx54/ecFSJAdoWNGM99JKz68DOCLf2W6i/\nwlqovo942BZ+YAQd5SyRT5vtx5K7Dt8Gq7Kd2y/AkcbUKdMq2GmAJmneYjf7\ndi7PC1eAuS5fm4SQTl9HfztgmItb37bUkClPjupjCvOv09B8Ep39d012r5iN\n7ec3unOwWpSjxS9hIct8WbS21aucK6ib/mKndeIsQd77RJL1Xi3YE6GOVhlt\nXxFc+HBpxXyfXrzq5BXE8I6YuohpyKQFMGlxAYhmAh9+SnVrNJ1yJCyS0noc\nGzA790cmjgDhbcfSjBp+6lkCXi7jPW04W2XFybtMzi0/YFwqjW++8WP9OnA3\n6My+607HVtndpBArwPqZJznqRaVPHIXdiY9g4PFsiVyBp51ocC9sB2/BhPK5\nPjFJWhcw3R8UJ19JxJtZXm20qpTKkQUwufF8xsiNaTGMH7St0nP9eUsgmqoq\npRS5ZEdEIxdNTvP57uYrjIhlD2lX7yTuldswvm377F3M70cSGYPDUUG97Grq\nWobVu9Aawvb1mFQSNRvJHf7KZQDyVIYH1O3gpce/ETFLCqmyK8U4jnV1m0rD\nBJLo\r\n=WI5f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmBIXuvYk+UZs9Ri/PRVa8+70szSdjFN8YoWEt9rQD+QIgTnKP3wCr27vWlK/XRA6CKiywQA+dtZC+kMfKLEX1g88="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.17_1573416791261_0.8740764310044133"},"_hasShrinkwrap":false},"0.10.10-alpha.18":{"name":"@react-ssr/core","version":"0.10.10-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"920e69dd73be71ef4156e052801df768f226a4c7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-dpgMZrNgj/UYfsXhWTqTOcWen4bUg/gYpWRNKB/tkTdxqHEjV8yk0mHjo5halu/Ghr+23r8gP/GOk9j2qKsJnA==","shasum":"c26db7bcced68220988872b273dc49b0340ac9ee","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.18.tgz","fileCount":25,"unpackedSize":36998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHAyCRA9TVsSAnZWagAA4ggP/2SA4jM1t/IKTFUB6RG4\nBa8brXyXPvr4o+1a4xPYWH3T4S75aFn9iUUfqt6EN0/pMGiLCIOvSDcmGOvD\nc77N/6KeaQSuVdAiruGopMNbO5RUlk7fYZKkAAYvqMNy3DDFHI0hXkK2P4Zp\nHdfW1fpcL21IqQL+p5M6Yo2DChE5dj5+m0CUwD5o7dxHy7kMgf5tVPIH+tay\nADvpliE0Qolt5QCsY+EUYDUf1NTWLjgEIG1ozVqmD456gE7K67Kr6RMXxFxh\nd5IFAEFpwLkJ9bl6AzJRJ4OeWRnUa1SSNaaF5hPRNWBCCBWxJrhp3T9orv+5\ni7kft73gNY4UQb7w9+BWluxuUc7Uof7+7PT8+HQS0dA5VVhBHHp9bqmleYAW\ndbAfMo2g52+cCLBFroaYXx4/rfA2UbXE5mqkTxkh8HL19pQxlDxyhBvWWB0Y\no3ASmcbSXCWdNjV/BfZqXKXcRqhwHG5v89ijQZkAX3FuJeRXmjNIf0dx7Wcd\n3PjxXI85nJtJ010cjmA+ezPNprtOLv3SMNWEqDaVhwm/Sf6n8BzZxtAgYEt0\nWxrjaDTM3UaVMyHuc/a1U2vYjI8Lua4ko29HNwlhEPUVhetdO6dhBosEkLmC\nSz/RlJ/uEj60VR9520Ufq1d7LCqqmjtO+ydjeayKuGyqsLaJI+UOr/5Pe8k0\nq/rJ\r\n=TbDl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTJXKOiZN+236pKFQr9COE0KjRoruaqzFWd2kBCIoCWAIhAOa2ReIkkZ+8AvmtbEux+yV0HvlFnzI2sA18zy5Xk2H+"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.18_1573417009613_0.26879550820114484"},"_hasShrinkwrap":false},"0.10.10-alpha.19":{"name":"@react-ssr/core","version":"0.10.10-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dd979b599e2f323e76293bf2acbfd77178a5b7ae","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FW0YNuzdsax8rPBVn28J70sWqdOxFJyHmLGntztLO1bSkXe8IhT6l2dpLZbKUkuNaGPNr/hMo1gZmpDSeS7rMg==","shasum":"60a345fa195d59f79c306d5d6d7af1529d468343","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.19.tgz","fileCount":25,"unpackedSize":36980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHJKCRA9TVsSAnZWagAARhMP/1MNdnrqPLMIZR2ReKtP\nD1tDXgJO2tUU16GznbTfPQzCgjHI55qsJr6LXE2oE1XSybUOkpjrZozzXk+1\n7ffgKaV8sIm4YxFZM2L7p/parKPkpE4oYefp9hZ0f22JAMFWclBZrSNYXJc0\nX2vPNEp7WDMHs3kqvlp9+fzXiFuMWK4u47epJYSqZjg2HpHEi/C3Ho5EmNJ+\nVJre+kK+/pnY1BmSkPxJDxd5+gUieSdSHqSzWgECP83Xjx9keJbct22Z3WY+\nU8Vs96tOAFFnMscx+IoxprScjt5HfqzJnBY/MNaU3KEBoBCTcMzNLMBErAAG\nmsf3wDzajLcdiuUQDUGe6qGViO/fTfOx5P9/EWdKL0BHJS0bXgZzyvHRkBYp\nwc1hzcFyqqO6XUJRhaYjwP15/Tsn+eacbiPe2JiBXk7UPgkeIMbkS3drQ6MN\nq1qlgC8qewt61/g1KM7xNSB3sBNSwJiEevqZfKYQQOm3qUA4Yq/lZKcg3FSi\nkC1qkoyh3AGCIDedrsAkZkC383jDQtXkdrb95cazDKySXqciCdI6GBXcmg0h\nb6BipjBsBy+buYBVQkk9cUSE0z5DceiiK+NW8fQLvKUgGJXI369GIsPaBA/c\nOU07F2mJ6BmfRQvx3b4wJq6cKwmXulGg5SfDmsnEPA0zvq1RJ5ziB/sunPPf\njRCK\r\n=oQZa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSSf93tJo4Y1tAyQSBI2baPz/XarCz24F+KDrJhgDGcAiButNIY+Qel1PojUu2omCk+LVY99WOXauOsDkZkP30I1w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.19_1573417546394_0.7854689205590435"},"_hasShrinkwrap":false},"0.10.10-alpha.20":{"name":"@react-ssr/core","version":"0.10.10-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3bd65a6aa58c74b2fc3ae78116969265fad14e6b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-73VjqDhRV+3prKBG4/nRMg9lJTaKAQJwHtsIL3LnpHNmqt1OdYVhFPKTJqmGFJF5cqywZJgwIIeY4KQZ4cSIqA==","shasum":"28e4c2921c9751dba47ab99fe5b6fb7e78c06277","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.20.tgz","fileCount":25,"unpackedSize":37012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHM7CRA9TVsSAnZWagAAgjQP/jVMlANTpBgaWqzp5jh0\nmEobwuGC2rNnxJicUmE40FqE99JhgUwJ/D/iwg/wb+4kxmDuD7jTyZ3ubnXx\nsLpemfpUWx03daTxTyJHzDVx2kBclDIZ+RFQIgpTcnk+IgdmAA5MpHkf5m05\njiZxLDWd8KhXOY5t3gY+ZT7DSTBBvlY6SmjHA3PVz+SGnWiu0+BznlnZEtrV\nz9kzfc/EJm7zNWR6WdlACiCbvQPqwBidYCKtHV18IisS1mgclxKmHsi4sHUX\ngMzoN+xpyGUC+YyD0PkbpbtkDdrrRhazXjIFtlgiXHWIwtAkUOvQEM4D8vkn\n3nJ7OUk+AIGNBXZnGx8Ub310mP0R+8MJPr58VYPZ2O1Cy/u9rTePtRu6Ij7A\neHnYqaVSp8q8ro0AclhlFICuQQzfywE3OcmbJA/5w4UXk6hOvXSSvoK0HrTK\nYCMVSaCVitwRRrkYpenpSebQGVwvMm79aN+WE/cd02jL/d9KjnYzJftavF9r\nkIDWXE9Wj1dzcfGx+9TdaZbyLKD84lwKZnTBYGte5muDFPUsUlT3bObA6vDj\nBC3pvDWCzrmUYfSnzj+LPbE/uBrWW1IH0UQkf1X2tyEES/AHM8x9UsaopM9z\ntuF7c40JwrEbXeA/G7ChAoq9AUEpO8JzQ1aN5ODj56pRfUeSx1ywLIbO0rx6\nJsvq\r\n=QgeB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1VP5bK28orp5CjdF2V+3Lj2zmjT5IUIMGxoqf5gYQgAiAppmsXJJPRuXqy3md+8846HXcnd5V6jCwuzcQoT0D7zA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.20_1573417787402_0.5055397870204061"},"_hasShrinkwrap":false},"0.10.10-alpha.21":{"name":"@react-ssr/core","version":"0.10.10-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0dacca33eaa91bf183e58e000d0e192dc645b61b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-tmmjQxZcrgIWhOfWt0HpnJj9W8Z2PFzEAjr8S1JDSoW8zf0kgWNaoeKsSh56y5y9pn/5V2Q9Du6GaG7LUIIkOg==","shasum":"f2265e929d2848eea74187ee3c41051ddfd3acc8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.21.tgz","fileCount":25,"unpackedSize":37039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHONCRA9TVsSAnZWagAAWc8P/RfSqkjuE8q7cefn/rsl\n8Q7ArD63Bkvy7RNh/hhhBDBshU/cyES4rVSJWPISr2SUa3SdYoitwiL26XyA\nwI9e1bDxrz96PjV8w3yPURz0KmwEuRZXZUZ1erc/kNUsmT6FDeAImOQ736Tg\nPzU9K5ZdAjDKNc3GzNIJABCTgWkJSXXF4iJmaZkKBDzauAkUowUNYcVE/+29\nx7hrn8V3kQBxpmvJMHjP/CksbpIraLRzDLsQDk9W0oJAn9qxuPSl3G6ld1cF\nUHdE7AEiOhUtfQfAypmAXPrjKeLa/18YiPdEUENscON43TrELOnkaj/xbZuS\n7c3TB6LftpGOdy6QFEjdOrijV1jmX6UmEXEY0RUhGCp7AiD1LFhIf7PTeaDn\nIHBgdKC2ltb2pLE1qSzYajaJInzzm/5dyUke48swV9QLgwHNd26XbVUyzdNy\nUICs7qskv8moTs8KvMcJoT5nXODQ0ptGAURiwzuWZCHVHYWocghSJQWpk6KO\nEQZrMT0qjW+Rh8ebweqmX9+bXHVgbc53sVbg7IDjRHT6zxpQNqqAfAJOC/B8\nGmKNt8Tb78Kn3XQLRmBON5WjtIIkr4xKJGc1ILQD7lVNMQrJcrNFq8yNl0j/\njBABODN3BGzotj8t/ZoyUhR6JG4ciV+44H1jopS2IEuzmSg60zFqOIbRZnyw\nT17/\r\n=ExU+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGZiXggq+rdqiKrasoC5pyJCPHRJGU7z5nM7oTrRR/UgIhAI+GW9UtpuV9sc7BnrSbI68csJU+6hbxAE7KrgH23774"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.21_1573417869114_0.01245434267412171"},"_hasShrinkwrap":false},"0.10.10-alpha.22":{"name":"@react-ssr/core","version":"0.10.10-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c5f2dda0a0f3b4e5c0cb1540f5f4cd0fbedecc9c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-GXzLeto+HtxKhWHgE+SRrgdx9ZHdOMU7W7tsUdBJWH+Qe/LAxLLhITJvrrEJj88hT57JfoGeU9+GgqM85VzB0Q==","shasum":"13a8910290f475cd59fe139194bfab50ca5f88ec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.22.tgz","fileCount":25,"unpackedSize":37274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHTwCRA9TVsSAnZWagAA/ZcP/2Vd76wTU9hCdOivCyLc\nK+Hpz5anrEsf2ryC7StvwG1tlOftIWbhRS56GamGDMCgDeYHfvvdhdkqRfr7\nzQgny6OeVJST18RdiXFmYGdMjmEk9b9MfHIHMeypwbbm4VJuv9oUDV9s3Tps\nzC6tYQ+VOrxqFW7hPrHelypRtn235iHoVLJbV2j3hUWXv00CraW8O9MMBjop\nKy2vD41y5D+WuLoJanDwU8x5Uoe9A2x67lBRyA49edfRZ+pipsITqQCV4Zqg\nE25A9nneXV6LqDg2aMLJDv0ZpQPlVa9b3a1OEOZeuQ9y4Rrs6yDPZ7XEwh47\n28EUeG3EY5tKfh/UjxTrzC+C99xxhce4DUDaSW852UtyI1839ctXGHwVumFh\nHXp+IVnti7topqXCuXPE0OI+icijtolw0Cma7ciK5bJru1gSQOUDWECEBS+g\nWTiivToKVWC7sTibf7H290IhM6dtc+1GefDc9E38la2Mf5rBms0nXRdVmovP\nFHYmiiqajwpCQ6I18KKVCNHzA2ZpMFbxo3w8w6sOLEND/S8244mBlv+Bv9pr\nlNoY9kLhTTzcgNM+YscFCjPKPJ8j/Es4g45vKfaePniF+Xhaj25mgAw/EaWO\nWH4MjjV35nEiYmz4NPwEVM4EXPixPjvTPdI5g1ZbvUJ3/FImFSLVxcKUI/jJ\n/7Wv\r\n=eIGB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDU4jiy5XhEUhiLdAKMUwZQFqjXq9YbFUPbfn8ih2YXaAiEAgsHVz3AmodepZJCDZ2UriTlumAhCm6HzXQDX0R+q/oo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.22_1573418224341_0.558078115213239"},"_hasShrinkwrap":false},"0.10.10-alpha.23":{"name":"@react-ssr/core","version":"0.10.10-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b0142550e789c22b4c634ff2e9c40d67d093b4b2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TIEDtjv7UzqhAF1W3zldGIfGsiZ01AQFyt5X+LqDlzN71t+Vqoc2qg79ZhfVED8ywX4RGiXy2fjCG2RNwQnjzw==","shasum":"efd320f95983a7c9f70fa6def0ea55e012af785c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.23.tgz","fileCount":25,"unpackedSize":37264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHVPCRA9TVsSAnZWagAANcoP/0g4khx2QOfzCKu+RCCo\nDuKXE+7PdiD0qOPJa6K63xGnI9yby02qV+ByEI3bGg6a/9QFaZ6rfFrXnxsj\n98qQ/enUCgJzQO6hP45V2/0aOAva8AI4K7UUqMMOKumdkBregg3qZ6og7pCw\nH821u3AeDZQ4Vyw/e4i7J40OQLnyW6oYgrPFslIZZWTRZPwdbRiha6OQLRuS\nDvpO5Jgmq6/M8dysi3fmvPpbIQqWbMxzIkkkZE7Rb7ebQYeYr9zy4cedj6CM\nDlkadSLlUvMVVTetD9BahNmH/r5Fc9cFFcCp0hmwRLH0OLWkDWG9YoL1EQYD\nbtZtVG8aes2JuqJf4MY2VGw79d9zSTuCvi9Mm2y/iUwx8nWUCTwC1Yr9vKUB\nx/tYXQbtffDAiMUfnq7LDVTi0peLTsJ0LonicKEYbutcWgqOUvrJzQS6GMSW\nN8hC/V1xrme8NKnVT7Ad6KioF2Jj9/8QPvNdy7HX8HOUc8hfjYmaEJ/o8GH9\nNPgg6ryX/G92jl/o3WrVScZtX7Oh5b8Q2d6FuXGdJqFpaWIMJSZHX5cn0n27\nLCcfb7r8fMXTgAqbOMuUpFRf6o3I58Pdu2p7yVy35DBCrwsgSsnpDMICJSqp\nP/MVY67ROd1QUgCYpafKOufVLYqzeCq9HTNnY3RnSWuMH5bqhjnuZRK6XPBl\nZuXz\r\n=/Wx4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCza86rCk4rP5R007DvqlFy7BN4lacGBIgJ31KndO3mAiBGh21/t6Q4E58Zeb29lwTdgy7AyNnx6aphUsvO0ynneA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.23_1573418318615_0.14811384984425668"},"_hasShrinkwrap":false},"0.10.10-alpha.24":{"name":"@react-ssr/core","version":"0.10.10-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ceb7f5718b0f53a53823612e81c6ca546486d747","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PgMOi0vaeLfCPflRr5/2oIuDkU9CR4m0y2QBDbAzHwYcTI6AV7HVAzB7f3f8w6+O3qpvPWBGauiEPWNi/iKTmw==","shasum":"f91742b7189fa649f8e907432afeab8febab8761","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.24.tgz","fileCount":25,"unpackedSize":37048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHXYCRA9TVsSAnZWagAAzm8P/ii8jE1etmzzlmdDbOWi\nwNAeJnzloR/58YIZ2eqpypodrXqx2ybQwBoWV6FoK8chJ8C6AkOlnxDbzQ9B\nxFofEZD5u1CqpRWP7lSy5qfxwqDVmy/kfLwEGbG8mhKnzwmED+j5UJPYB7+y\n3DCfk6sQAzayYcboUjAEpaId+MqE1MRfcO64pT1JQuSxH0nLWNNJy39LBSFd\nXEKeoiQwD8xNpGpr+iqYzwQ5a8ch50x9QJFKqElju/S2F4D527dYhS+5Qwrv\n0DZW6a0BMbSGrxS35OSItWKst+qN2OS4XOnYHsj8by9to7GNhUWkmMa06Z13\n//1tZbGRtB4Yu63jJxC7nk1mVJUluVq05v37KOFY6LV/I+CyQI1AyiZWTz3T\nechOkCOphfOdBiJgVvffg6N9UEBG+5XZH+2k5tpWTxV+tMuYjxCARmLZeREX\n+d/OzOUJbelOs6zDkxvhAh0oJAO9b29XqXLYX4abWdRqGc7TposvENzK9ktm\nNdg36A1jBPzpJNv9LmwVYi+xN9n2M2eWe1vv2Cjm7I5WiY/1kGKBFBjXmlj8\nxzGSXF1uxLUFtk6f8tZNrsC+CSSr9Gxi7u8VCASwfoyQ0xArBd+ci9HW4UCd\nWUw3oo2FOMFzGQljmdX75fAdJUFBAo5FmLPHsvGfsa55j2RoQsRbPPmx3R4k\nV6yE\r\n=6K/V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgr6fBImoJdAAgNJDfiIyfCRaKHbSCRVwMRLX/4QYBeQIhANzdsGVL7RcAexbToPQ7plTTUZIAmzeKojwCg8Lsbeu5"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.24_1573418455692_0.9721634199245184"},"_hasShrinkwrap":false},"0.10.10-alpha.25":{"name":"@react-ssr/core","version":"0.10.10-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"721d54f46cdbf7a876533fa8e584b8d11d6a93d3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-EWlF1eOHcLNlf7K9YxO4+fQhKKSVFLNNM4UDPjxmcvXLTKYRxxzzePHf1I66h/z/XCriQyZCbb7up19e3vDyqg==","shasum":"4a0ef0ff430e302f565a8b1d798a9ccbd77f8a60","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.25.tgz","fileCount":25,"unpackedSize":38856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHc9CRA9TVsSAnZWagAAniQP/j76q44Vk54cABXT89nQ\ndpBdfS9NlJduYQV/U5CIsDtB00RXiLI4OpCE2FEleqiwOWdU9MGLmGn/kQOg\nABY6DqUHFCWzHfcJVszEendnFCVOtpl4mViUi187Ih6U3a3z1OmJ6SplXR36\nRYDEmfE/BF6f/BNbR8vYUF7YNK76Id3xMLL/KxhTjRL16l0/TwnKpBk1FATT\nojT0aDbyC/AcMajh73KkmXsD3ZzqdpvbXhyGxEGiAy6sJUMFBOhhX3wOvcbU\nJO55hmxU2JHphHZ8cLSCcJd3RBRtL4AswYFcm+bvEBNKRNva7IblxVbzfy/U\n5ArargR2ZRN4j0VynZG/Lct3IQ8qufNLSXNku9lHSRJG/P0ahdlKAi1iUKwl\nrIoi79dDtACBZ3kwz+8g1LoUl0zkNmpjmkDQZ8NtEiU+M060dLOwoEUnr3yk\nis3Q7t/cPyOZ8BlPx9fF9YXFeGWi9y5NF82YGwI12EK7UmZpwPl3VLJ1Bfjn\nL8EHEVmWdlUmwDerI6Ijhp8vtPKEN0cqGL0wqJf5zVDJVmPm+RIT4k9Z79Fa\nnQRleB6RTFK5CwlNrr7CPYi13vsm0pQVDoc1ejNKm5LY/MS+w3tNM/Zqo1eq\ndKLiYF1MnKp6f4+AVLVnuSSphhJtq8xyNdGR5obD1QXBpSZm92t5j27XJSJB\nhATh\r\n=o5Ij\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2x7ZVTiQo5hHQUOn41TJ1pNQPaRGnQrlkr5zMpm+1jQIhAI4y4pF1m9fdG6QWj3ivmBMB7uz0q484GfVNKf92pi2s"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.25_1573418812937_0.02236276642951851"},"_hasShrinkwrap":false},"0.10.10-alpha.26":{"name":"@react-ssr/core","version":"0.10.10-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1f8cb6cfcf897fbae197e50c40094b9847fb5fde","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hJdmgR705yN5IDnof5xAFMh3+9UnJu8EIznMZOkQPcLYp6Q9/mNsAtogwB03fBdOAddIRFwtQ3BffML1I9eH6Q==","shasum":"8362df3370f3aa290315663d4e74775d6e34b84b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.26.tgz","fileCount":26,"unpackedSize":43381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHnoCRA9TVsSAnZWagAAr+cP/Rhh8FbaM/2DBkBj6WMz\nApWTPlhbYmL1iAedfJZreg4nmdQ3o9kcYtjR+SOdYm3KoYGqQOBsJW/uvo5P\n9+nT8k84fUhNC2nWYf45UgjdZx8zjQvJAfY3jcviB1z+lAF8EUtjuNh1o9g8\nTj2QKeSvXaA+ovvHZ+z6REWCO8DMlPPxSImSrTiWgJsnB1VWWvab2CwTgHLB\nXTZ2E4+9XYg9OZPL64ET2tT+T2xr8js8T+eiQ3xajsrUu7RapZWOLqkwZe4F\nKzQbb030wvK1rgSKFsnrxSLcEP5RnOOYNC/06gH+Yc3kE9VilV/Q0HNh0nT5\nQ81QcdPFNUGO4iq5Mm4ffYwrKtmG0Um521JSNQ3Bz5VP5A5vGuKNOau7FJ//\nP5vBXRERh7rUrcpfs2QVHFkXn+HROE2v8dn4T7pp96OlHi1e/dLxYPkJZ7HZ\nUeZ1qjYJi2Nkxp+uqI6x89Q149904ti+TyHT9JxyR0aXC8B1VHtXhaaQgILL\n8Utxw9tvDAXksba24yTcdS32aAQ/3V/BG0d1cw2F70rmzBJLX1MMpMvQrnzb\n+3z4xSpsef2RSg78lfAMmbZ0a/x9giD+aBTyGbcTImqnW1LComvrmsu6Z3ft\nR5bDCf2g97OpuGuLn3m8NiRDpncAsG8MbnfkBBTt8zrA+iTv1VUCv2heW9zR\nIPXs\r\n=r6op\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgpXcNE1bN/jD8nlcMYBz21zZP4ZNCrjWzocwucbSKBQIhAMWrZFmpkLtiztWY6lWxyyaq4spqeAKPKeJ3ULvQXotx"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.26_1573419495930_0.735434090195654"},"_hasShrinkwrap":false},"0.10.10-alpha.27":{"name":"@react-ssr/core","version":"0.10.10-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4579a22b3b82be0be8573174b136f9d1460a8571","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9175IYqywZNLOv/hgJw9cjmr+vTg0lvZ9Ombonu2Xno8POq8+XNvPQ6ZrYLAdUWmNgs6ZVDz2VhMhBfBda5svQ==","shasum":"234fae5519b74fd6c2b794121bb5050488f87841","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.27.tgz","fileCount":25,"unpackedSize":39028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHpjCRA9TVsSAnZWagAABN8P+gJ1vjMEHJrzOCdX/ArI\n2xoZoqB6ErnhOCILi92jFJQhxn06VeBbnaooHl1eAxuAtSkDX+s5Elrmy8uK\nOBtrPUvdY8mykWWyiZ/aPrzHxgeikFFzDAvxeTpED7CE66wpFbYQE2jOlck/\nuOQAMEt/qTMwAMfOtnbVEK/huYYJbencTHpxuZZKsvnhVUawSIX+QDS5R09J\ndq2Fu9tNlPf9ES2VPhzyH546ayBrosU7mzD1vID70mqAJy85fJrFm6G9yKUm\n5CWEALhvxUoNnACOZ7HuQRrsRWntbHKOSLJ4/BOEn/S4nCVPX7K6N+0uWwIx\n+T0LiXdkdpFszXCFp0v9taYbFVkoqitABu/7ZQRoPibZJjJth8XUpxOubnf+\nrxLSC2p9LauiPvcggjuMETHshhsqRALpAo1uKrB0SpqOO5JXnEbU6tfhqoKj\nhlRiQI5Yzt59RS+7NUYYRRSPXsRO0XQTkhsGNWGnxrVhV/TgZKwsfj32Njwh\nupQHicIAUU7+9TqFXo/m170CKrTZje8zkjqzufj8yNxDoIct/iwOZGH0Zvs1\ndb8fNQYUgkCYr6xB0TBk6udFlzfELHF/iOvXbtt2w6liTTfAVPBDbqwC1HKT\nb2g+uyJREzYH0R8lriY4kD5taHocC0aMFi0kWX3zRWGa406PVUY3GP7wJkSe\nv1pK\r\n=f0eT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDD9heHUNn4B1tUAf6Ao46tuj+UDUEkU0y3L4Jv831ndwIhAO/gBJqBVhCIUomGCcl9T9jgjk5oI0oZuBndJ0D04the"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.27_1573419619427_0.11552921326311161"},"_hasShrinkwrap":false},"0.10.10-alpha.29":{"name":"@react-ssr/core","version":"0.10.10-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f8dc96c82127dbdea47b3c853123b46c3f343343","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DMaqt32V79SP9KWpnZr+kMjtVAqwVFgvd9VNPzql8fslFXzzGs3GnHiUWM+p20w6ws3/wjQqum7OVPP0/0I1uA==","shasum":"a215925782655c0f9ecf0d9fdcf8e745fa5cca62","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.29.tgz","fileCount":26,"unpackedSize":43425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHtqCRA9TVsSAnZWagAAILYP+gKthrVHDblNKzhLOiAV\nzxkTUdai7xvecqAU+xXsRs764xsV0kBESZ13FV2IiZ+hLboNyVNfqtQ6lzGh\nv98/UiC6lD5XDmIcZ5Vccq6igCh50V2S+MsuAhmt7rvfT673YK2VRhdA52uP\nKKicnw6TXxwNi6yFxQeyS2DLNq6jhJmJ5enUbgPL7xuNwetaDiNT66hNpj+V\n0qpiSB1sMaIGLN7ehqm6rW9Lb5uwLHweiLX4wFb6TyUZZB1oqF++OBFh8Ogt\nj1/nJOvj+iFwZHb0XTxp+4LQWg7ejiPjfQIECyrWBCxLxG6Z7d+yozvgb7yV\nUFA2t014AQF/HU84rTFMWK/UAWRJM8rcGej9nqnuBN/omBnOdCbkWFL0MKJW\ntpTUjmBOxRCoFVG4SxZvtrxulZzXjccsFRcgf21spmTsH9V6fxVw1i9IGQOd\nEzICmYRGnsk27B7wx0qgTvs5grHXLANLPDAdiMpsamsmSzySXjs/6MD1leEU\nQysou78K+E5FrhXSgQ2JLM0+qXNN4oCM66aX/jhDTlCU3ydXQ5dgdTGTP9Zu\na6ZClnx7w4+tEHeSs6xbryM7QOeooFG+KRu+bqmc8fI6UohOUWxlnaSecEWR\nFp1+R5xAK5dVJXZGHwcZ4KzeukDDIKuVIkjSNKMUfL1QGCX5pWJQBFHN5ErO\npJZx\r\n=7vFp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD31KR/L7wJj8ChdZQsnYAHCASGO6Fi35GCW5J3+1GC5gIhAOGxUTGqb1wY1BtIx5rrd74U2vuJojzpBK8mslZ+6MJi"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.29_1573419881770_0.2688112221629604"},"_hasShrinkwrap":false},"0.10.10-alpha.30":{"name":"@react-ssr/core","version":"0.10.10-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"acc3873536452c8ce278e5757a9e5caeb4327d21","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-cPtSTIF2XOXuUC6sT1h+wZnbYNVZO2l2Czv10GyebkR+NpPzBozHf/6VQobKX+wIOpWIewV1XAdq5RrFsT+qmg==","shasum":"d5a0b5583f95ff2bbe6b90341e94ab08aaccdb40","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.30.tgz","fileCount":25,"unpackedSize":38954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHu5CRA9TVsSAnZWagAACS0QAIz4Bm/YgqCygdd7FuzX\nBJwWF0iTVZVMzNusq6NTV+JQoA7/32GEp1aSjjeACypmmw8tev04jVVISGTw\nRAnwcbwAbWR5E2oxw32EJaP/Te0MaLytrlQbOwUSLzPRxpmhKHqrx7R3TLIm\nbyYdPeCXs7V9T699UY+Cs4cPwpcys1mi98ETFP+0uWDpGJXxmn6IMJVf2D4i\nw73LyrIbaXqI7phTwuOqWYJfdprPqdb2SMNjV9gt1u9yViB99GuRjWx+jsEs\nl3Grsg2rJAec8TlR0i24kgQjAEiSM4OcoAfULP+NTdCdGdUbMeh7Syd3itdr\n+fdJeKoAjR3DFZFcgHbUz3nwIqapgWRfGVnjni2Xk2gPyUagtsbPDCpBi520\nROOoTqJ2Ge5DZW0ch+0HJtELb5ArgzIClzciYLC1/l6jQSoxJXTxNAb0/LaD\nH0cyl0LyWdm3201xmxYRkmgzydS37nWLtvqTCl465HQfxNRIWtOX2DfzUJhc\nx0n/sViWFQHuBWpUsKiiIP0g8WMbLJlRJB3qpYwUeZlg64K+ED8N8HKQ6fGy\nWEGLWJFBjXNEvLqoCMEIqOHIeGpJ/H39hb6OobfLiDNkw5hOkgQk8PzVnPS4\nfTe7xfD7prjTIW36HWnQrGeNN36mi0IicrZyK3nAyEekkG290+CSTmyEFK+W\n1bsp\r\n=jftr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBuao1rMcqOMCPHcLCwgoVls4aU8U3k6iZjMHNNvLMNFAiEAsYbePTjw/N/Ce7IcfghfhJoZMUcBMtikew6jsHHZlSQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.30_1573419960807_0.045005866293462926"},"_hasShrinkwrap":false},"0.10.10-alpha.31":{"name":"@react-ssr/core","version":"0.10.10-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"925d1e93bd39f90d7436ee419ce428572c8716d7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-yV//kMz2Id0xQbg2W2F4ZgpLRNORSx3qiAkioc+2aRiUrKoh2xF25vOCU0B3lNpxsi4tivyRC45RaCoTvH8DwQ==","shasum":"586abff951acee0b795a2911a69c4c795aa6808a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.31.tgz","fileCount":25,"unpackedSize":38840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHw3CRA9TVsSAnZWagAAkZMQAI1jYMZfn04sQwQ6tk3N\nttNTG0BQoIjxnNcOX8JLTW5WMF88ycOCRfOl2T8NLuerwjy+8l6mtH645/JQ\nNbJpYNumYTIB8sKGtsjn5K1hnyKXSl9Ha3sXNFtugCVCZ8fj0kLsl2Pq9g8A\nMbTwkhmsI9fX02Pk5QtPqUSokG6vQWMbq71024qGNuVUB8x5iMnutAuYEoO3\nwIFECzfn7A+GvP0TM8/IeZAKPDf83h8snqaOGInuHpvPBnov5D1QuHGoAC6f\n9ZvIt1XEY8B4wlzva2G0FptWct8Ja+0Q5o+fR3pmMU0cRx5PmB4ptQa/BYRg\nmnc4CNKfSC6uxUYKDoJQDw4d+V7joGjVhqV+VbkDhYljM/YDm+muAtz5GCgV\nwKykDZC4CY70fwkQR4GOtpDGR6NenZ4mNbXCNEVVBGJN7uqpsdI09s/vwgxs\nWy59hBQJTDFs1736OWBE1DEwdQEASNsM3jsQB9l5ofdXBl7f0sBr8tU0OZmr\nbImkWADFXnxuZBNoUwR5whDdASnbMHXnJ1W0k28whIJUQZmuA+ltXdWOiS+a\ng1yQO0MrRnmfbnD0p/KMxf55ty66NJD/mfhvjR9C4bAoiscG94mrd6WFtYzf\nJSwv7sk8V1SG09H0Qur9+qO7Ul8Vo5RbRGf0+KZA5LpTKURrEhArsPN1LeQc\n4rPJ\r\n=bdSF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATO0Va68Liqa8YvXFY8oqKGJg0/sck33WqXaMUTILfFAiEAsMZCziAoOJ/7+rHq7iFO66jNh/QJdQ721zju0Wsn2JM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.31_1573420087059_0.48419584159827767"},"_hasShrinkwrap":false},"0.10.10-alpha.32":{"name":"@react-ssr/core","version":"0.10.10-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dc2943233feccdebfea527a6e6273a0a9002f8a1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+v/Fn30oyl8BVoII995NZbRj9Fw8oWCLoEk7/yBMP0vJ7kzP02yS/ur2mbBQiJAnUL0YJRVdUQwq6PG5hLGM6Q==","shasum":"06f3440e97f00f578f20431f14724bcfe109ecba","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.32.tgz","fileCount":25,"unpackedSize":38814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHxnCRA9TVsSAnZWagAA4vIQAJKFbDnRnS0j2ToHozP2\nGx6qh8i72usZExHmiW8UeCmP3VlCI/T7BMpsPWztRoRhwVJuu9cLuQgdlvRX\n+S/9Ro6W67VTJL/+q6n/xvm02uRjBiTPvdCKtHGwTzA79gWp7od8iNuLqIss\n1b3nUA77iMk/iT1nDb9bjeFkUVEeCpL8sWzT6QoXFeW88Ji4BGiRs/uq5+pv\n+kWYnNKn7Ed0KArTjbrL6PTNLQQmurDaMZ4OC1oCth5qdaxKAcydtOWXV3kA\ns9FPHlnAj5AsyWVOEWrOUZjOBQF6Mh2sdIoKnWbVGKWbvxCdfJstb3F/n+Hp\nTCweO3w+A5tCjoFLId0IcdgoDWBzJs/OlUD6W/fnoSLn4fhwe8OZC5OgwA4r\nI5v4O2yz7U9aPPQT3ikBFZTX2UYANWZFaTiOMEb35yGP4eANbun8COOSogqq\nr1x5uu40T3b0DbvZYDwaPL1j2A8Yuf0Ikx2NWZe4pOclkgtt6oTdXckqZUAv\nELYpg8TId2SbpFvjDqfPx1SEHx7hVZk1R6orGikqzg3KFlJZ2H5UOb0FI+ut\nNroblqNeOCM0wxv6IPJwzdnensoGFVfkGOFpSScz9S4i+1emAxI/p32u5sBc\nDAZfLU0VmTPH72Ls4noGBoOgQq2EOBp5zeioZ7CEhhptJaA2NlKHYNk1/Eoj\nzbhY\r\n=eoCx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHXCo3c+CSBYWA9NVVHWtSf28IrfVLDQBg4GaQWoYxA/AiEA68U3PS/Nt+jPp3r95Va4KUvqf+rhzkpN06PzhvyG2oY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.32_1573420135194_0.6035611276664339"},"_hasShrinkwrap":false},"0.10.10-alpha.33":{"name":"@react-ssr/core","version":"0.10.10-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"39390b5abf572447635ad320a055df308b06b10e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ksAsArXUN4NEwlmLqHZ//blp+KgzSs2sbtKEfoOiG0v6P+fEnesRGkxLkG0L+vonMyPEpDhYVj64/ZdYoe6FMQ==","shasum":"6a03226cbd0ab49355dc3665d831683b6fbe99b5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.33.tgz","fileCount":25,"unpackedSize":38800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyHzfCRA9TVsSAnZWagAAIIIP/jsNkVjMmnBQle4eMVjl\n8Md/XdSlRtDs61olcZ6OAhsBvS/OoY/fmsJMsANNdenjfJYLGHUA+pAQiv7S\nxg7dTnWR1sRNNVwEcc3qYgFZ1LqVT2Q7pzNHtTzUiaXY3PB4a6ySUo2tGlQL\nPgPC3Ewd1McVN/m5WerSB4LTQdsOVnqbCaUQMBqJLnQpMHTVkZvtbfb1eBAv\nV6OQEZTfkcf1dFjg2GnasgYMZ0Z1HriIH5RKuyDjeiUH9KGQGzcKBmOopRFj\nPgcaoIaDVZuVjREnCZtWSEMVGhpMd8ADuNi1+ecn5BwC3F0xjxbgfIezAdc/\nHnEN2/TayAyrFLS+C8ClZ8wgxCBBXuMh29CSeYgTpRGE80xfCJ88+CWNamtj\nPSXVD+kvSpMU0CdSQiaYup/4Jl5zQ9y+x2EjWFnYuly4e0km9/FOP+uB4hrk\n8Nr4JRHCf45eKAgW49pSr0IVC6IvYUPIPG5Y8uOnuwvtQc/pxxRayITHKckU\nn4DcEYSShBhWXzY7LKAejzYDQdm7CYLTY9XdhQxXx8vH1ylygrEyh0R5fZ1V\ntas+QsMo+TJzfo9rGOfrPgNhNMFrkLvIlM6Fygm4rHMNofKUl6AKppuxbq60\nTTZ60WBeFH+LItF9OGeDVpnda20KH62eSZ0g636A/JoyY8Aid0X+/yhn/sI5\nKpiJ\r\n=b6DJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQConDRZDkANKbNPvspC0CX1wClMEyKAkBNihDmrWc1SqQIgNoN/OVW8cC//lMn22h0p/xKuqliWt5oJh9TDUOFkzr4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.33_1573420254591_0.27704107506290643"},"_hasShrinkwrap":false},"0.10.10-alpha.34":{"name":"@react-ssr/core","version":"0.10.10-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"62088f104b507c729a44b396d185e1c3edfe8294","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-oMOGrOjGImVDLWXMp7jhiu68xIAVRfvJYQ8wr6MVo2xsQEQVEO3aHwYE7t3pUJJuLbGqpRoeFjgfsYfo2Xzdaw==","shasum":"ee34c8744d1a0aa62584ab734e1697d08be0ba9e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.34.tgz","fileCount":26,"unpackedSize":43293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyH0zCRA9TVsSAnZWagAACxQP/jm34B30MEqu3WyVyOMd\ntLWEYBE5/UfSm0YAsRaZNhrt596MLDwmN9kiYj1sWbqv7p9/9lkP5kMguw6M\neSFIOROSoAj0t2S6MYhxAaZSgpwMKN6e4NqBxb0Z8xkmvM/4TQpTdSWE/0Xl\nS8+yYCciekiDCrzHfLTxHEIitVWmfndZgFeE+QzJbDHGLQCLcA03xZ/php0L\nCDGss81iwUFloU7jX4SCkM9PQh+0B1o58vLGDHHS83c42cbF409P9/h7Y3Tr\nOu/WopyjMVOEc8VH+dgWrtyc9BzR+ESzUWLjzT3TXSvmzYsg/dwKqpD7o80/\nHixh0N2LD273TOuKdMDJ7KaHyClzIZUPUtrvRjzdNWx7FxmjPc/BYLYszIaW\nIkGRJjcxsaah0q+frbWfuBql2z1n9ESppFGgyd8iTN18sgk1UGIFltom3Jo0\ntyl8ewF6nYVMg1Vp/S+mUn7TLZVXKH+kR0B88FGlp0wUOBTFycBTZZBc2BdI\nsbzSX7lbSmARWjEJuMLA/tCXd9wT00vRIJ3K5zwbs+GYAJOMi6z1t5Z7xwk2\nt0YZxKVx8DHPX/skZEOSpfBVIcb9KapBPlLylyjocdLuI9J9kO0dx57MrHXU\n+DlDj3l7sHQUQEWYJ038qMy/dWfGYH1XjTjxIkQLUBJJ0dlDGq+phW7q4dLe\nRrMF\r\n=8URq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWuaREtH2C6jynCgjkX+aHeN7gHE6IE2/K/zFbJWFpoAiEAuH65zQegHwfXTZCWxVD4MtGeofgjR4Q3w2hyLqvJpbM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.34_1573420339260_0.9747618630090062"},"_hasShrinkwrap":false},"0.10.10-alpha.35":{"name":"@react-ssr/core","version":"0.10.10-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0c011612d17c11dc36d93da602bae33ca3b2c484","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Fmxqx+f8IbMRO79CxbQ0TvqV//4hB6N0VNaFmZ6A1tYcTd9uAYGPGVusGg5Y69bKGiK3xH1wlst/cw1gBnddww==","shasum":"4ef53b6b5c40092d625cccf9878a49bcde89ac2b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.35.tgz","fileCount":25,"unpackedSize":39223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyH+sCRA9TVsSAnZWagAAlXkP/1oiyhz5twHUYuo4H9FU\nTEe9nT+GtKxGhHLpq1yXB+0xQr6eLgepQyS51OFTymLp1cQ/bhlPsGRipdwh\naTMKwJtYbTgfoyMUetF9vv4K7IQRNxDZt/eQvqPo3m4xgy24erbvWW0kFE+K\noZU7IgPAaIREBVcjCl+JJPLnbxQ9yuJUlQbd2CRJANU1A2nGChlz1+vEchrk\nWTt8oDVSq1efJFFGegvyTTvkqp3cUFd8SUmC7woHJPWc4eAuE6xZE8ULeUxg\nDQrtplBuUcDtsxriuP1iwogZgO8WGNuad0SehhvaTABTVh9kgmy5SWhRfQcE\nqKw2v5Vc908do1ErBQBTcftFHQlE1T/ORO6pCmW/LurT1u+fR5ujb7EJoa3q\nmycoKw/wpYo/cFjCyHdICQ/tmnFEpEiZ1ZXkZWmCzpgONRs6hV5Vz61SAKW6\ntuVMdQquyll/uCcLwuxA5CJSvJObvNbbHbbt0Qh39G+jL0cgJOb93EtqI48D\nTeeoReM6RlAZVqqBudzcm/Q+aBk6URpYoIhxL+aeZO3y/E/XjQOMH4aaKETr\nxIWQ/wExcUbAfJsRJcnaIyfiziSl7x8Y7jWgPxiP4nOhBrrvz9anQV2TYQxH\nE7xIoq9Qylya/oWMafZeXbrb3ckW4CzhJ9DcgpjL6AzXO/LJXLP/HXiSUFO6\nf+PM\r\n=fxV2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9Klxc23W/XmRhgq/gSfUJYTAhhsD0VXaEmMvu/M3MYQIhAJN3Re9qqseeVMwQE4Hh9XA6Uhm7hkNxZrnBKZGr9JI8"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.35_1573420972593_0.2577700164950323"},"_hasShrinkwrap":false},"0.10.10-alpha.36":{"name":"@react-ssr/core","version":"0.10.10-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"059ca77d60c3362b476154a733c7c4e679a8bb17","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-tk6XAf+ssnAPeJG4O0FjUQ8p3Q6Y+wRbH69YHh5U/JX/VzffSpEdUKfiJ3EPZS2o5CzuVf37bcLGj7/bzR+XDw==","shasum":"8570e50913cab70e398064a348d0883bfb951a22","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.36.tgz","fileCount":25,"unpackedSize":39331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyII7CRA9TVsSAnZWagAAD7oQAI2M7QJTnc+MCxQ6cXbV\nNO2J8Xl51aAiKtj4kENgMkGwiloMhFCgWJHGfMXepqq9KKBrIKcw3D49D0KP\nURvHiJvmUrjGOSYI/ugEYu5uNL5c6u8olPrW2hT9JxQXFPJyj9IEX1saYAVz\nYp7H408bzp1zrfQglzMOc+vco3MT0j4iuUy9Uv0HXNang5LcuvRDlI8oQRxf\nk2GoiWuKbkKDShBM1GnwzWSY2okI/iYe4e1o0lIJrKF1+xJmHCCQE4goZa6L\n5/QyYDfLF3w0S1Z603W9R7V4d7RK0vs/slMmncLtaJUks752EyEU//AT9kdd\nnTpRV7Wfnj1H3kamoN6gcfYv3fUPDLE+cQwLIhVFtF1YL3PF7Vp4o7QtNtZZ\nyeWui8CN+MmPzNZGSvRZtD9ov6k4JSujPS5ArsSnlSVc9NNTI7dp8YgxVfum\nZjZWCaxd+622QKBwMr1JqbHynla+a3ou8PuK8ZX8wVhw4XF/ezniKKiyT+D/\n7/3vJcaUYy7a2dytzgbydKetI8zpKU8urzRok26WknPTiJqksBloQ4JsArGK\nw0cv/5r/oMqUciJEixKIoW4fh6HKtY8HFtF1aa8+dSmNx+y2W21XHvmLnLdm\nKh5HTFO6j3oO/3XWPMthDNGaGsb2sjFwyXzvJucTcBQuLc1QEfwDGRn+QUxm\nVKxa\r\n=JbEf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGYnci0p7NsVCPtrlB91k55UCNi8hwu6SeIhkzMig3KwIhAMBLZxpLzAVGE3THIVFnQXF/H9igkU76y0UndPOjVUdK"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.36_1573421627006_0.5629378311249915"},"_hasShrinkwrap":false},"0.10.10-alpha.37":{"name":"@react-ssr/core","version":"0.10.10-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bd5cc795dd62bab690f28daed41c7703311bc48a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-C4G8dV6YnTdiFQE1f3pPEwqyr/gBme8HcY4401yVJHSCiAyiDi1fmxjjSLksJHgqPRQtvyg3hN3uTRidc+qbQQ==","shasum":"c6bffdd084b43720facb540ed9fad51d6e4d68c8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.37.tgz","fileCount":25,"unpackedSize":39195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIPZCRA9TVsSAnZWagAAO/gP/R432C4clXap8vY6Syrj\n0lKTGXbRtNAqsHFikdgNH72TQPkNcQPZGcwoncRy06xFcOmfMwqpBfn871kv\nqkXkq75+ty7JSgErtRP+D0o1+d6tXJlMdDBVbbo53LVWXQgikpW4aJC+rnYn\nJEyo4DuBCqId4G94/l+k8z2jOWRpIh0sMZ6Lja6St9mjWBrsnAUr99bxEebC\nd1oQkD0/RNB2kMS/W0a55c5sXYjKX1prcJ35j07/lgVX3m2Wxv0mlT0Nb1an\ni2nKfjalVPus+45UM7XwZXNw36r0T/xhe0EISdO6RD7TJGe3/pIqItW3WC9l\ngFlZhTvcwvrFzuKnCLmcVU0hfzRAQxCNVW6vR4WUR2nWYe68Eb3MXqtfP33g\nquKmkuSr9XuJf/BIAD5nt0J5fRTJSDi52eI90Kp6HN+RatoBZo+PHsO+tfZ9\nEO2DlR/P9Tn+ho0r3NOm6kIVGIAzI2Fc+nACxPgSL0fF/mRmZ3IDSQyyEfQb\n+wZ0tvOhhkuh9ySYUCCn7Bu1uh4B2cXoYFOqIz2foc+rbhjgUGteSvawVqyH\nUZlelUGlw13d+Ksi7dybWuNut/ssg5bcist+jvbi2QhdeGeA0zqe7WgfvDJd\naWSa1R/p+OcMULI8oLVeipKW0ucec+UbYyLDxB0FnPE5EeVH3qXikRDLiVBQ\nAGKy\r\n=3uFJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDiZkO55CZSE9lROilaZqj+0QChtbHlvGwc7TVYVrh8gIgM7rODn62YXMBiyfWdngevhU2fUFK8htdOR1UVuRmIBU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.37_1573422041204_0.01941466209063525"},"_hasShrinkwrap":false},"0.10.10-alpha.38":{"name":"@react-ssr/core","version":"0.10.10-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"de1ca8c5342480077de0bc8b054b631403daffb0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-fzgUKrkQ4Tp114NlVUhFflfCrr6xyLvTF7xndxDqTh5+RMba50qgWAUrONXG2IByGKO3OHbVHaElKl5EhKMmtA==","shasum":"61b797e091a85bddf120bc804ba9b31aac6ff7a6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.38.tgz","fileCount":25,"unpackedSize":39211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIaZCRA9TVsSAnZWagAAp7gP/3JZCR8CQ2tOV+g7bOc3\nDcYC1wsE4b8zuaLZeM2WT3cqL14TGi0uARdP2Eo2sPcX0z14SX7JzSL+E4gX\nDsCv5PIH0/6uARQZh5AF6KN1KsIsFpcuMdQsYYIjJkfErjh/4+mKg3EXNGYw\nF+Y/a+WMuy/9Pynd/paUnyFjXBpWibepB144UgWDuUtek7wDSkCpreYkbQeE\n22K+AsPTwtWNupu5JsKtl2i6oUHEun29zuB4oJ1CAKVb7fRvFjEh+mtJPknx\ntYCENTR78HcU0J6yI9ytS6DK/OqsAUgdJwZv8/Y98FandvTkoVdczt6XWAfh\ncGWXQzsu9naAEGenA36f0vuP212/AaF8mL6b3z89OGzOreHdCYhtjId1UiQo\nc/IhhgJ5xiFG2dwdk0rLfjRalJkAK3uayKYzIYIYhnDvqTSettAXxkAmY9cm\nFll/L3yuQCG2rEQw/jLjg0azuqsEQT9Ht+s99YlscOPPn5z0NXILupe4+r2M\nuYfqYHIzpFEeyHBoFTTAtPBEizddvhG+BaCA5fjdviMnWeiz0flzo04+qHqZ\npSf9OBgk49FJfGNEovQDpXi+/9hSRE+lMK7shp/JF0ko+xHEacI/w4Iu8VG5\n8TjajKKh79fhKopK/qDJ6sACCEuVqiT4LNsXGODpqidstBHvHuPZ92gQqbjO\ncX7A\r\n=nrWr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdFz9MF9Q/WukStaQVHP4kiytP4u7DzwmemTUbNqhYpAIgC//bZNILnkB9Ez6PXlJMn/IeDd64dpoVfziqJ0UJVhs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.38_1573422745243_0.6570904675582205"},"_hasShrinkwrap":false},"0.10.10-alpha.39":{"name":"@react-ssr/core","version":"0.10.10-alpha.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cd79fd726fd94e42802778a8b7e58217373045ce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.39","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LM2zXUSkFhJL8iDvQcRessLBmKQmG8l2MRyg2KGCJLj3iBYuZABsX4DXvkaum6q2OuXjQAB8oE/q5p71WXUFGw==","shasum":"2ac5da50d7a60955268bb2de7894043cf9777555","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.39.tgz","fileCount":25,"unpackedSize":39239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIdiCRA9TVsSAnZWagAAqCUP/iMK8RI3IHjjMXjJYUhr\nBytRRZUWptP1msLHuVDII/4TksaQ6R0hJGEYKWBDtU5cwvGrr50kuf+boTSj\n0b0KzpKBcqVjdSnp1E4XwEYF3qYVFyF3bM5m6DlLBltSlwMT86KSDmHFGO+k\nJ1ZxALorqVVOkQmLN+NDACyBIxq3Gl7OdJMUGnGRBHunVK5ah27Vpu+Q5SN/\nahbiaAlshP19b5YtNzfP+xemhPiwVT3PlaGLFs1hgNQqgzgV0qR7K/j8p9KG\nvOjOn0BbzfIixXooX1yYqiQeRpjGINuq7cd2/P5iClQwxqQ70jfCNozlecgj\ntkFblb2nt9rhbrTlIQCpJeuBmEog4gGQeuNPQuUmdMn2YgDLWpCfIWVl2jHF\nBoRC/6oiTuPbeEsew+DZqDAT0hXBfvvJ+tDivKG4JbmgoCAzP03eXGOjEh5h\naM9JFGvWoIUUDtvAg8ksmKEXOtLijVTj+iHwH+LpQD8jTr6RXpYffjPr+Equ\nlMuKSY3n6qjZzrS0AqlXm0To96ihZ9Tpp6A4dabyBf7JqiBKJk1gWJ/fnkvT\nbvMPq8ncL1+3UbqSpjUMfTcbLsUGJhXl6hC5Llq927l4i/WHXmmqv9vSxefU\nAMq/pNE7xQdjPI5YLRv3ne4i1hQFoOrfq8gIoTmvGMaLEbbvSYvEVuLOAMvR\nK0+e\r\n=C0em\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDdN+qo08NvHZ+XCCvaSrb8sR3MCRlHAYxz0aUpNFfClAiB0A8egI9+fBkvoKbvC14rFvA9i2oGkY/cguwG2w4VIuQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.39_1573422946477_0.7485181224017516"},"_hasShrinkwrap":false},"0.10.10-alpha.40":{"name":"@react-ssr/core","version":"0.10.10-alpha.40","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9bf5814aa34ebd14029322659d2fa79059356687","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.40","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IhlND4uWgXirlFY/Zl9MqkxFhfDSRhqOzrDNHbOdyJN5Vf25uTPH8TOvu4eH2/Ijp2PWiGjqeFaO+pPTMMHv3g==","shasum":"c89bf2541d84e4a5ec80fd9f52d8ca5b518c2383","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.40.tgz","fileCount":15,"unpackedSize":31339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyNp/CRA9TVsSAnZWagAAtzkP/0pVqd1K25IxpHkLQgI4\n+UQtoizlJ8V8Vg9825+zIN6JUsAe2J/B/OJcSnkz/3GX1w7Oi/FLuht6Glsi\nwm6BJsAMnYV15jB4Uln3xaqQb57RAqQ6zuI7iRxKz+yJekemfr3BBzwsIlGv\n8Vtr//2HOhxbLpNRDzQJJoZMU8mm0zudvB/ddFtZoJ+06HBLQv9Pg/ZROGn9\nUNLSciwcuLO3f1VJw9/YHrSqZCQ6UYdHTpIUfnmRhKhzumFjlBEDOIE7eqQz\nIs+FIvLdTXXmpWjkMedL7CLtN/vlYAoMPzm/n2zbq+zg3b37cMBeiEVQ4H8t\nPbisCHF3Hegir/ULNa9f94VVyI38fHEDiuWQC4lpsRo653ny7XHj/2rEIGjb\nwId1OhuweRud0t5qwSzGH0dbjo6vMDJnqFioMh5LfJlUzjQubLudiHaY12Cz\nHWB2BKlcfx5dqE1ASloanu7ghA9klLEdgNZlC1kBPmshOONa+HsEwWMmhlh1\nVPhCgGZ4NTu4j6Jbz6/LKjdRhStLf1hAHVrGcx+GsE1cavDYsvA284BulGpx\n5KRPldWObsAHya8g/m4YPiUB8fc6vsWB6RsQ23HGf8zJdJgrPI5Ic++IXkCB\nDhqUDC527YjGo2Es983t+MNh4Vky4nmhSa5NPYY4oczTzW1ZDrvp9g2U3Atf\nIIyg\r\n=Go9K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwy3AVZF5TIjizs8LoTmQWyAOYGdAYFRCgyGhF9+eQcAiEAxGdDKqMhz+grxXq7I7AII69+FBGcrV8Yg4CHNxEmT/w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.40_1573444223215_0.019916113910236843"},"_hasShrinkwrap":false},"0.10.10-alpha.44":{"name":"@react-ssr/core","version":"0.10.10-alpha.44","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6ed0e3500ebcb0b9ae3c4d61bdc8b2c2df904266","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.44","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-X9RRLltCI8B4wCHHHfCRDEEL1/dDf3KiJuh7nwP0PxM99GZMAbA9Rx61HEd7dU6HjJTkiRO9QFDmPAYeNukw7Q==","shasum":"1118b6e7c110943b862d49ec247f02aa04cea476","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.44.tgz","fileCount":15,"unpackedSize":31477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyN5QCRA9TVsSAnZWagAALP8P/25LKieU1JTwCK0gCAR+\nCiTb1H+elLpSJfe5TsF1T/E6idBRml7TrcN+FNIaQTQT9FKBXuFRB2ZS4Ta9\n/7TP8q/L3Pki+Lvgspwryw6ye89MvRYf67LX9vwVVwR3lXmioK6WRjbrYZ0+\nWYkpSmS+lIiSszOfsVRWXH/LNAx/eVwoCqyXdes5htbA9nPmzIP86YSz3LHk\ncO35iuu6qiNucNOeHTImWfnX7Uu/4X+Lq5q7wXJx4KTZVGrLk3CaxHHaID8Q\n3881BSaJ2x/pqq0vbsNowHSqlJtDSVzLMTDqcipbQ0QFX9uEd3rbk922XDOj\nMgQFDtradXE3gKpytEwjWtxbSvtjF/P9Ow0A3IB3366Mythk4+OrJTVJ3eYy\nUFgFPRBDlEIm0KDWUP7QBREps2s3uNtG52gY+HX4jnLkIvwNsSCGL3EuOME3\nY5RU5n29TT57I8rzwPxRZMi4DUzZMHwpMjkC9RXlhKGq/4X9uOJVxfkiuy1P\nk/bowRwcf5avkQtUVCMo7ySrzWGnLL0k+31dFzTzeRcio5/yvapHcml+VlQM\n69QJHUZ/Ggo/xl5hG+nREQZa4Y+QFxtQWkNgF+TpmcddgezvxxYWulwluYX9\nc0Od0ndTB6ffSaziWQl7xLokFTOsNblIbHvohJVBzOo+73dN8ZMVtMyZ3he4\npsRB\r\n=lBs9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXnFydCTwmS6phLBDqeZb3rIXdiDhW7a5G+csKyreSPgIhAMOA8ll9An8XiuFfYxwZdcjen5V9y8uGeLqiApxigkfh"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.44_1573445200118_0.965649427646373"},"_hasShrinkwrap":false},"0.10.10-alpha.45":{"name":"@react-ssr/core","version":"0.10.10-alpha.45","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7f182168e0d84386d401d7965ed418513b644b92","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.45","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IbIRBh88HjRvGoen+nS7ITzKLMG3vBsrKoHPK6T5wq1H6kctM0Cp11efgK5hQFHdInONgGRgk1PHvHHlT5Wv3Q==","shasum":"9061f45dcc3e79adf2f9083af5e8253720798e30","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.45.tgz","fileCount":15,"unpackedSize":31438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOABCRA9TVsSAnZWagAAoCIQAIVLi25eOrUXq5kijF2r\npeax2EkC5UcDcG7IF92MoIVUtKcJozJDwOAyDKMa+StBfbtkLU2L/fr3FxoM\naDMbYuUPFkm8/2bjwj0BDdD0CtjL4JCjB4ENNssfiyBWnwdPpu243VOTxzzG\nH0vvbtMnADLYwFYf3EaPE6wIUB6g11Zn6mGR6aTLv5FnSJ05/z3XYNV+D48f\nksKofXZUNU7wP+TQSQZb9bbm2gOlqHlQYh82edDkisayhgdNsbwj8/ctcuJx\nVKb88RTZgETXOBO9nYpHE7XjReCDA6SPqx2Yw3wK2j/zosuygx7U0hxwjMDC\nMST1Le00On2to9DP1geZuFeoIu63mLAdr8uYykzxtdQBrWmCcqyGZNgcChV1\nSc1TuZlBDXBCyAaYmBFH47b3JiViHO/U+SQVl148jxEAkx1qGy+ivmro4YIK\noK4kjZ8dv3g/hh+WM3Xp8Bhwk6UIi6zgIzq1GH2brdirxHvgbhrFR+oAjLNh\nHn7JONLHTChG7BusXZDJwGOf2N4vg8JbNdLXh7JVfs4OqgLDmi8lkStka1E0\nyIy1rKx5VDxCFrgX6E8N+PuGozeW/pCj7ypI3500hC/Vqo/fU5Byru9Y7aKB\nvJpefgpIsYHvQKU90cn60oBuE3/DREI4XoPOaECuqfQuUUWXIKuwTWtJLt6S\nx56X\r\n=J5NT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFizcyKmyBRHb1MI9+yLK1OnFdBq+bw2/Q0WtGtrjDxsAiAR068DIWyWJ1SOLx3wXEE7aChaQFF64h81WT06MOm8Vw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.45_1573445633159_0.8452390536930692"},"_hasShrinkwrap":false},"0.10.10-alpha.46":{"name":"@react-ssr/core","version":"0.10.10-alpha.46","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d034b5c32cca51de07872298d76fff8ec3d91bf0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.46","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8cTkD5kkX9DdzWaFqSEEwsRs+KNiFMd5HY7aR/9Nagb1SNKnse81f6ySn2aFYBNJwrto0uCA1R6VnFRsDWQahw==","shasum":"be70dc68ea2ac6eb49bb6f9e04e76321498730f8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.46.tgz","fileCount":15,"unpackedSize":31458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOCaCRA9TVsSAnZWagAAiy8P/j3OwMVZgh3//J9NZfG2\niiY/BxW2tFwospW1MLxFi0X1C3qwiRpiFOQFM+xzscbit90BuaJLp2akQUWv\n4njGppuE0BVPnFvs/ziq0StiHUhudrT46Gj6mxQU8e6H8+Rf3MydKc1cTrR0\nkCaFYhRbe/+vI4yHMsvD2LVtQNj1yP5RFKquRhA0MKNd0zxbHZoGIcb5Z2Fz\ngIOk0Y11C1wiF/R40ksUDEGGHGZ2QPzPcH9/sgWVZPXOX3SlvsMKO4HbFaJR\nUpjSItajFZcpTEJOYdUWwFdO2Sq9NAFvt5ATyQ2Rr9vtflWkdfFfiznGii3w\nXgfAOCesyxuuJNb0ncZXlP7jshdDckt4/UkLcADnRGTG4CteQNiurhjekB5t\nM95jFxHiJlCewzhhKw6zzbGf/uV7IuEuuHXLRJuAdNrDsXPqV3+jJJSpBWGC\nWddSzeYax6VCTaMFJNytMV1XECJ4u3Rn2KeqR2RR1FK6gzSZk8+3okXoOIck\n2KIqbgpA8mVHLRmUhDOzKI5so+SCZAbfBEnHJsOAU+CGZjUBZAEMcQWBRGzQ\nCSZckXQeRlcUMdsvaK0xV+/PyvnEGZPqNKcBTi9BS+z52RZYP9RgHEgjEHUH\nhvUNmKWp/2zPVJCmCWgLo9KSfLMGZxz0d1XBbZP6gBuPyngfiY9f+7ZpJO3x\nHU+i\r\n=YEt3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnRvMxftB+Z4sJxMN2Zg2yxOQkgJiYLVSUOE4hrRoHoAIhAPxPHGVGEm8I9zo2AbtqwIupapI+v1Jn7+/K/nXATZoy"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.46_1573445786373_0.1732473578195275"},"_hasShrinkwrap":false},"0.10.10-alpha.47":{"name":"@react-ssr/core","version":"0.10.10-alpha.47","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ee06949e7c6f9f5fefbf936ab16f393d5beacb2a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.47","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-4b6XK3MAc1Tk1oMU1I0ByW4UPFAmeuWSsLOQNAydsZh0Hpvvb8BsBSJNVbG07mORU8Rc1a1QLQ1kvIMuougobA==","shasum":"7f7236c36255091b5bdafce7032a09a046b5f9ef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.47.tgz","fileCount":15,"unpackedSize":31501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOEPCRA9TVsSAnZWagAAhSwP/jnT+24AGx9hFi0kw1Sy\n7Uf7o/bpdnkiguzdnYu6hgyDLFpeFH5SseGtWGkaXAeIBfKpZrv8y0uA9DbB\nkM0LGx4EIqZmKFe80qLxQGXPVYA1KZE0QWJTRiZ8/AVy0kIBvYJwRUUZiAM3\nIa3ghp4gSP3/CPhwvV/ndWd66DZoohDOhbs26CoGguZn9zNA3Uax+Rmj+zGY\n2vKvaT5kDpkvT4ZZqhRdaClafyv15O54yJMxij1wVIJCUw3MeVDA1CiqkFjq\nvRgKHx2uEISD2v2C9QdYrp99yQgXKrfHpV6zEhGnRGoq/lSSZfQr+OPKDG8+\nD62PFHmwh9T0Pfk1XU9Rx1klyE/s9KSDwGRV7nD5HbaIZPvPq4B/Ex2RwCkC\nnuGyk3gL2PE0EA8vKcooPUkrAHU687ncvYwX+GUsYoHFRrVmKXHt8YBkyoIj\n3u2SkgO29eV/cArY6rmiiCbPDrEqZRGP57il8M2knIY0A6/7wuIx6gLn6xuJ\nJ3q4/xGtOObSd//ZhBcIDvO9bg6dcJehS7c9E+J8k8KKm3oFocQhGE1LHJnR\nfV4swzXKNOh5P35TgOflZ2HJtLvvL+1xVW+BWL6NBCXFTPqfiJFPPI79LS3c\nyMTrOxKvJ+4+nI6fX1w7DpMilURDkV0U6ioNkvDni2NKklJuEI6wlKx3QhLE\na9ht\r\n=6CBf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyE5YRyrBUdwof80jgWVSVd30R13evbNQir9xm5A9QoAIgeK26Z8eM9EyTOHx9Ib7KWvKlQUXa68kAMHxVL6XpRGY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.47_1573445903162_0.9012681674711949"},"_hasShrinkwrap":false},"0.10.10-alpha.48":{"name":"@react-ssr/core","version":"0.10.10-alpha.48","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a211cabbc577ea23348da3464478da71a128050e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.48","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ax4mUqjevwYDmkvpnRq+jHMUN0yHhinSy7idybR4ahZlfEYalMNNZGnVh985tts7DyIOXDgoAzqIzVMwtofPQw==","shasum":"ad087ab760d1e4512b28c971906585eb224902e1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.48.tgz","fileCount":15,"unpackedSize":31911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyORLCRA9TVsSAnZWagAAy2QP/0KPLq8LDk2dVtcXuujE\nZte++XvCDOVcbuEH/F0zvKenEwpWo5oGcWg3Cr/+x0uTJQ72c+1XQaYY4+sa\nqsI+ANtgMqIfNOrdVwugE8YzE4XWhEBqfa9fI1AFcVbdkYm7IU+w4NVl45IN\ndisVjppH2ez+UVS5a73Ny2jYLEyoeRUgOOVNu+zM+M5eKvZy/FweN7zpOJEa\ngu2HsZklCrvAteAlVdAWGkh+v+FGvRJ4dJDV3cLxOd/ElfZ7hUVckWZ145z/\nVKU5btd1hSWoMM9r6n1HCHUJn02Rv3MOP7n81CBdkW6wB3cd0d6B0BqdXQzW\nIqmwHvHbI/hLrGFcOyKVMUyqeILZ7pISeoOkBaLmEkqiwNL+hJN5f7KYYeab\nIVSyFu3/NwLN5Pp9DPoRuG6Nc7OXQnMH79kEK/caJaaTLkjqXk926tnMshYT\nD1knS/WfhJ8Xu4mirHy1EXDbPrdUNh3nG2W76tMUIy7+fA9ZbLbbAMTgMrhu\n6cx+aOSpI9jQ796QVLT90aeShYmhVfu/0BMAqbEUKifDNz3UO17SALXAnI1L\nTSElpEx6YvAJJe79KWqxfIPr+Ef/Iu38wxB3yoDgTYa39uxBcXv5XCpNn0EC\n5oSPihVAcIkqqawLGuyrH85kcwDA+lJII+X+UAvxC6lRHOjVigSrc913QbiV\nQNBl\r\n=xNYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmTboXS5qvBkbfaBK63OrT6npZ3ozK6Wx49PwvGiRWJgIhAIMHMDbRnsAWJGDmKzuFUc4BT0W7ODlX5UWtSQkKmA8J"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.48_1573446730725_0.0745188498986773"},"_hasShrinkwrap":false},"0.10.10-alpha.49":{"name":"@react-ssr/core","version":"0.10.10-alpha.49","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cd398b628ab5dc542f65beab6c4b70a42a8c2538","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.49","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WbWl7l1z55qlOOQ4+xa8doUfVfbYPOSXEjxKeCn1W6Tfde7ekIoV16Gob6ntTk7b4nkdh3v8Ljke9VM3DTXnWA==","shasum":"e5d76a3a70cd6af602bc837279c83f0479f76a1d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.49.tgz","fileCount":15,"unpackedSize":32033,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOTzCRA9TVsSAnZWagAAq6QP/11grdZu5JcTOiksOKvU\nMnTiwvVzEg24ILt+0L/vH4/MW/Bpb4Nfd5JX9r5fG+Cl1w/8YhMNG5NHMg6q\nCX5CUi3HAGplcwc41qbme5tPmvscrv8nydqJYj4+o9rZPi/JXAuj3OfvW7ZU\nnNVpX+cA5cNyFNIWufFJeBhosE/cIkOI0dvHm9sLMjTwiAR5TYMHQ6RHFfw1\nklrYNI2OhA80KEvBPLSzCt8QP+qRUKwVXABPfOiH1wBS5DL49gAq7+dVRSUk\nuw6dkqjqLQHFA1ndFU7TZxmxSJaHacAVbz7C8fOG9hc08+KpnpDTBzxLT7kz\nes5jEq4p/yyj/0aE2bB6VgBlKRwqPPSPizNhcHkD6+K8XFG6ins+7vhu3AYA\nRToI0FEkA4YE9KP2vfTwHZ+FoavsAATNWHA9yxJ4WULMGtmaAEkXt4yGYPC5\nRGF4075WMBNuji6iLsahd5Jvv+WmA9zTqAAyLhjG7nT14MUeSvdg5CN9z+DS\nT1ubEx8AUTbncNVz7Z8zYQPt84M9RRJlZrgfnDjxrq4RmE6t8h68WElux4iq\npjcQi9YiUFxH/+snCYWJvJkvX9vBAk+kwkYZPl+ZxVC1zof7hqaOB5DKUYO1\n5jxlaAt4LALY0xzLFXVJMLRF37GkRCMPlaY/0b9dFmNUN9STl/oNLRucVUBf\nVcI2\r\n=6yKP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDP91MlvX9X84XuSA0JfVE86t2yArEzkVKTL10+2+cUawIgfSFHSYFAsGEyDV331wo22p9PbR5dTmCA9lDC3rBPl28="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.49_1573446898848_0.47825082961807763"},"_hasShrinkwrap":false},"0.10.10-alpha.50":{"name":"@react-ssr/core","version":"0.10.10-alpha.50","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"02e1556e2e52a45d2cbf89bb91bde918a7ee22ec","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.50","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-luTu7EGaAcp98rf0bYHb9ubsXvUQ9QUAmFdZw7sxUPmyr1eLqdJ2Y+xqDAkshLP7z3MRfQWm/vRtfoqFseEBfQ==","shasum":"f55070f0a6aadeca20cdaa6b1b406f8331a186e4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.50.tgz","fileCount":15,"unpackedSize":32037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOa6CRA9TVsSAnZWagAA5iIQAKLdJ9YwebnvCDq7GhIX\nCBVNHWKfkkBf0bcyBCSpPZ/1oJPQjA8lq8fSTx41Iz/iPtbR39R0rW6wtiZA\nqdWfRZC+bLf8Ffev9apNJ9Cx0vC7nWEG5/JZjx67Ejh6YgcicRf7cnSO23Gq\nWnYAHAzDbh/ulV6ys/5z14+00tlrMtzzmTXP/7kaWRCd6a1g0vUuxn1Q0kin\nM3H/BBrT7H0aoHxwh1oPoWBqUKbysyzjlSMaoasBZ6BQ6TbDJTzf385EV22B\nRrRvmk9Lg7ikQ94qAKUeQNgHLpMoS96oknKhnQaE5aCn9fnoJI+geaSmtL0P\nYR8UI0tMJK4a9FOJlufmKRnhmRchF6FujbbpDxWyg6Sj2j39UzDkdMANQ60Q\nfzy8AxP7sgvVpU1qLxBN6RRRe9XEqr6+WEIHEl6MEbnbstdvYJB22kKabo3l\nyIbWDSq9WQtZD77/pJHM1vHXM55HsxPlxHkxT3aNG32hmunadNZtJJhaPpym\nFlgeILB0La5/10kjjfWGzAgIK5iGyTr2aAXX6XDUdjmiQzTZ2Miw81C71wj7\nfAZqnSPM9NhIHtE2870cQjG/8ZxICy/6KngrBFtwi07VH1CsxsZWt5PYidSq\nnwy25n2/JBHexJBF3FbyreGGDJzaK9oYby7BoO7WZVEhGB1RQuM3m8ceoAXR\nXx1Q\r\n=ge/1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeh1N2/ben9H30Re3jAtQRfh45SzSAaIAnnGH/utWRpwIgYZTyfNJx4nmRcMNX3Bz9P8FGke0vWT/TGxjiKsPM7yE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.50_1573447353475_0.5277185272134159"},"_hasShrinkwrap":false},"0.10.10-alpha.51":{"name":"@react-ssr/core","version":"0.10.10-alpha.51","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7731edc202aaebe63e5fdb7ad38450886556f9f5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.51","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-k0g0Q0gRvbl6GIIZNjttlRiCEfRgnLFHpjiJoC9csm1CE5G8TcFxdg4ReTAJ4iH9cRlHIKPE8Y+1CI8Ky/aAUA==","shasum":"af188cac5e2846981970dd3e39711c8e82a4650d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.51.tgz","fileCount":15,"unpackedSize":32025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOfdCRA9TVsSAnZWagAAAI0P/RXEut2JgSSzew9VwSJz\n1bHv2i8e0IlDDIRvvL+HVy5/nNFO1NS1t+9wAUf3/L7Ky8Vg/vrjntQozwCp\nCmIXvgqhWAW4eqhioBH4PS+im2U3exBroTcDpJmSEexc00P80JutTTGlg6MF\n/DlZLRnMCq9yO+be0XtW90KShTRseWKsA+Iasb2W0sfaoRNSFHBL/ASzRTjl\nRcSGzBPTeqSdznuS7s8Y0C4e8EZHaS7MxK+D75PtzPy4f+9ik/zETH042HK5\nXzh6TOjjtd+Nihl/5N6hAqn1hONY2Itm93nonIDAe/BSWI7cgkWtFhH3hOkr\njHxcYXFCCjsx7Ip5k/JUDMgnTBbnEBM5G+Kc2F6RGgbXi1nLgafx7W0RYU1i\ni6VJpj7Qv9F2KiUNPxnmQDqsuPsntu1Lzdy5zFiA4MfTnV1Xlua33VGzmZSR\nuL0dhv4pn/knpZkxheEguLTi3l4MwF2HwptU4guZfrm5Al91vTytJ49JyCdU\neQiV96aMSNuGxmfrpNkINFwgFrtdycmzf6OBxwllyLsgR7aVv+idxSrhUiMR\n9weSOHz1lZGSKyF/6UbxEUwhUbSyrwsGFHQ42SwY8TL8nYhVOPPV0wT/saoc\n4TYXDIXgfYmtzY2HyWT96w2yG0Mg+tpDyUz1JKRav/YedYvj529UFB35K09x\nBR/J\r\n=S1BJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEcY/6kXtwBunPJv+IxUUqYD1LY2WMN+4YPTAsbG8AifAiBUqOdom6EzdUo21+JPR8onbWVGwDBC8boEbW4RsA0IGw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.51_1573447644943_0.5845330717554342"},"_hasShrinkwrap":false},"0.10.10-alpha.52":{"name":"@react-ssr/core","version":"0.10.10-alpha.52","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9064dc75cb41c3068aaea4ef69acbb15e4b2286b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.52","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/KJqA3lry0qzLpSKAZu4zXUsOBSqI0no/rocq5OUAMaKKDdg1q/JEfjLnOxeCbHNgbTtY+rco6TBHaZpBFvURA==","shasum":"9d399cf8d5cd42f378d679bd15a3e2e2f42d2964","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.52.tgz","fileCount":15,"unpackedSize":32038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOi9CRA9TVsSAnZWagAAVHkP/jREC/8UnKwGkD1R6q/8\ncwzCLpUjovd/I0ofgFw0fW4WKoT/gimoCWcqA8hFtk9QKUGHlL7vxXdC7tT3\nLdJXmWmPaNVPbgwkSvSCh1rFQbE/l7OLCJzTXEhitr0F4rqdg9SG9QMFezDJ\n7kAfz0cNAUi1Lh5c10idg2Ncqo6bbNnX3/EthEcak6R4nkJPaBbXGQRoWpY7\nhbfW9qC1fRMFOStVuUGPPvqOaUeJ/BbivoaVSl0d/KkYLWOp27uVir8jSGtk\nAO77NmrDMNRueiKl4/tmlknoLA0KwHDGh/C7bFbyORByS14D5WN0qL0fnRrk\ncQyxAux8LuQKNuU8kLBNiktR0h5Avp9zG/pbtZJXEINZ4R0L6hqYnCklAvQw\nj2nQ8hrlE2eGLvCi0k58lx7qugYcCycgo5F7vvbAnDSauzOftp7aph80HUD7\nBrrSUQUCn+cKE+4gq+OYaDMh3kWdJqgPNHAtistwM2mDc0ypst4xVn0Xuw86\nmBYgjqDzt2OpPfZgp2QGkb/KYQM/DaYalOhloK3DZ+KJqMe/NG7S9Dv5pvgM\ng51/uNr49jfip6HVQ5wmc5+MsYv1ZoD4MZzI1PsXacc4aOVrMCmB2eGbXnXk\nOo6T4jtpNArxlA4353+wN+5QyV7IVRmy6PJEsBvutux+A0CtVje9m+/0bniw\nxTRV\r\n=HWV3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNtWtPQilhvxs7onuR1WKhPzfPC+IRAHRpAGFfPKedNgIgPl+uT9b77T7gZxyy7Qzvv9oPjjZ3KSQvwOD2lyVMy3Y="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.52_1573447868523_0.22258117725116033"},"_hasShrinkwrap":false},"0.10.10-alpha.53":{"name":"@react-ssr/core","version":"0.10.10-alpha.53","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9528dac50a56e2504ce83490ae941c1617df2837","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.53","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-niX2rIfJLV9NJCWoDjL6NAJqjz1vA7+vcYkiOYKWFF2ld42Nb9nfgcOiAwgGrG/HMAIEMGeCl3kwWB20PbCVcg==","shasum":"a8b104e78cd8d66992e62ba89898389970714bef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.53.tgz","fileCount":15,"unpackedSize":32041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOkACRA9TVsSAnZWagAAP9IP+gMbNMT8eLtL9PFiPgbN\nIEAGErkbklgTaop+vsTwiZgb5+Ox/ySj+RfoW0mnNf/kPZj7w5HGOx2r7fnJ\n5Ttu0jts4VoEfKz5Wb6GivIQEFeOQF96EYkVtmyTuEhshc3Fu9oaN7IUeVK1\nL+pha2/gOiJn8up/sp4ZgA1BKSl+Q5knLy8GdcQmCskf7RVvRBVqAT/fxo6B\nZTX8A7cYEYxE92NRdo2OZsXjzC9RgiIMim1uu0CG0GGAGJ2ADmqy51mbysxg\nh2Zmgt7+oolT1P6jiv4J3QgIdB7hIUWSIKDu45JhxNKBivwpJJ9KJfsw4IVW\nd4ApdgKY5BRZOOQm520mDQ9LSa6mu0u/HytpnYqPLn1bkx5KSejcqifUl9ak\n4+S9QVGkUM7yVcJ76vUrDCwV8TSvw1UuNl/1f3wX7zuxaQSisDHXADX3OsXP\nurZJ4cbYwzvzZFRVmy+LvnRa6UHaL/sN9IExv2Hu+7hybyTesQ8FjjVpHp8N\n86QHMfqH6CP+HHRRkkMLiBHp2Db15SHL4/fLy2XA7Bix6aQ1t3t2gZnj77eI\n0GLv3BCm+YtAQ9BzY2HrwR7Ry/BSUSGwmnFPZpNmw6eAQv3+JqVASdb/eg71\nFhyi1xY/T0F0Yi0C9YripEj6yWRHrrNO9/aQvW3EaKBHunzr7rr7aPHpc+Ed\nmPcb\r\n=KwYl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvg3ZXCQ4yIQoUNmKPuDIsem19SrPiyH88ITXFriwsmAiEAsxjgF9ebU7FEMI51GsvP9bzjBUb8J9yXgiebUC5f2NU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.53_1573447935883_0.993999586433598"},"_hasShrinkwrap":false},"0.10.10-alpha.54":{"name":"@react-ssr/core","version":"0.10.10-alpha.54","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"757d8d448a29c4ee6284983a0e190cd510195c32","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.54","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/8KJmN4jYPJ1FJ+HCK97rf/uY/m8GH2yIYlqLUKq/3Osyz7Uolea9HXcvj5llJau8ozOIV7ZjGSY+YPIYyEloQ==","shasum":"8479763ecf698f118515aa29720016858705db7d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.54.tgz","fileCount":15,"unpackedSize":32169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOmQCRA9TVsSAnZWagAAUPsP/i2AwJJMlZFV1VI6BMXp\n3E1jryFaNZrvF8E3UKqOTFWfZ3m1tE2dsyGFSvou0+FbeaWIViTlcysRKooi\nqsq4Z4sFYcTBIu7eq39RYKrg+uiIB4F8B890hCcAVy8FGLGuTbUIUiKMJG5Q\nj986Z4ComZVYNcvd92T/rj71ft4G2O1fkLu5sDwMWYmRHg8fg7V5iQa2bMSX\nNRePSO7Qyr5ayTGnh0xS3LW9YjMqjXObdqAdKLpk0dfg1UU0WiabltXhLo5d\nWUADhmURGaJ5lW7Af51o7/Gj3sECQcmVkZUPxP1p94sdKV0iVlKBDqS9nsih\nqxnSFCBCRZ6wd4FGdhsBKk/tJoLphprXiVzxBDjKgB89Ct1FQg1S7WqIZxun\nLEn9zy722H1tsLLRDydxJeq9+jteEh9lXbEykWGbCXPxUBeyRhWVdiUYAoA7\nymsv5CNpw712Q9N2Kc3vZT5rAMUoZY7qPozk4j9BbfMjEAQqJztS5ejxItua\nPwVO/IKhB2ywUpQB6d12CCa5+A5E0NLrPte4s/o7K7slLPb8hVoc4qYxNwpp\n/VKMiWdELUoVmLIRJIDTr8DeEbtKNJk8Vrg5z46Kus9S2dGXcr0bmoM1pgyt\nraOrRSfg9oHSqTtn4bAAWKS9khVUZ4p+xNGL2nJde9wFxroBpTJNt9NcQDMy\nc7PY\r\n=n/Le\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEmYSnHG8dZyqhU6KwRE6pOcfl+G7hmrO2Twepp9M5SgIhAOMjbKLK4z26rSFjn4EUmKEL3xnk6kVjfOeP/YgYQsw0"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.54_1573448079835_0.5485996196895937"},"_hasShrinkwrap":false},"0.10.10-alpha.55":{"name":"@react-ssr/core","version":"0.10.10-alpha.55","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"21ef99cd3f0cf377ff7db18855a36c04189ef07c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.55","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FR0DRzFaV8K7dXllp/EYv80kjct+nRljt5QP4YMRjWHQPFvlC4s+Ndg2NUQX5GgpgCCWfGmF7YNxLKxF16ubgA==","shasum":"183bd7e9455ca0fac8e6edbcbe2bafae3f073d36","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.55.tgz","fileCount":15,"unpackedSize":32007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOpOCRA9TVsSAnZWagAAvkMP/3J20UPvrHpPFfsmVOW0\nbKaTMO5OlX6Q8hd1dbkmQd5PwixaaZy/43M1FsSRA2eNfSDLahhjXoHKCcEC\n6F3rNdFiJdyYhSofpbFaAntFooJPvyHIG9qnjt3u583dYN6JODcQpgNBBdhQ\ngjlG+dqTnNFv81MaGRPLRywUTJGIAyHpI89XhblTi3GxW9CAJG7ZiXck/4NL\nqWv2rF3IRw39D/BHL0KrlAscOZa+zocj4TNd7bijPFH6Qs6d8TOOJfF0wDQn\nI/4/Q1City4GqOzCvgUrnp6HcfCjbjBGXgLHgzXB1DpGn2LU8H/apoJ14nyk\nCg+WQR4PoO+4Ipu90lktJ0CDm0VKcJhyeJCsqEJv3qLXJlBY/CtKghOVTfAQ\n0ZU9+gqrgBx1zH4I/y1Kv8JPc1DIzGdYTPXrzPk6D1CR+HAHnFUL8MHtsfqY\nKTealYBmijhgEswfAtj2utliAI4lYgSbBXXlbyz8smeiWH6EW1+2/wGfcBFn\nrvFVATBAHiX4f1Zp6ogbvRykUvpJLba3bZjSlPegD7b/0HYHTw8pYsjPpfYM\nirvpNBPta4CIx6YLyktbkWOEQIpcie9XW7A063cqVqfg5zPd57F5O4DsNZyz\nyRmRz+ugOWg9Hj8aCjKW8VD/lBfjX8NEfa+UvB4IZBa/NA+8aumR17vDVv6G\nR20Q\r\n=ng1P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/edOeu9CCToEVsEBqmDUguIDUUXyipIKEHMkQX8jx+wIhAPwtT5+W6f/JpVP0XPTIwX/pERHw5FXQzEVPnpK27bpI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.55_1573448269765_0.6894244290670803"},"_hasShrinkwrap":false},"0.10.10-alpha.56":{"name":"@react-ssr/core","version":"0.10.10-alpha.56","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8feb80c12ee777c72c6861819760d3ce620b0de4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.56","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-s12cbZrNFmozgYCHd5386sS8T63q5slyh/uBgCSoxss24y7UUjBKqPJJ+ARMk/+U6scp/sSBIebimKL8fFZi5A==","shasum":"8483ca935e7755f7f7ff7c8e28a6024eebd5fabf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.56.tgz","fileCount":15,"unpackedSize":31742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOusCRA9TVsSAnZWagAAjP8P/R68oSyLOj6GEzKebFdF\nFlTzemvwHDJvTpqiT6cRP1RI3SedkNQ53SMYYx4S9/SwFJkKMIvoM45HC1UF\n720GwopfuY/dEEMApyrfybGEb/2H9dxiyvq77+WLhlRXyMlmSZ0+1ahg4JRp\nE8vArbu5an6FJDY78BK+N+/HGJqdwQiGuxt6jxLiIx1l2D0ZZaF4kLGYJ+V3\nGQpOQyM1YAuwHDRRWAciTWIvg79h3DT1L/Ue79GYl6q8fqIPtsvb6KrPP4rG\njCK6xUtIE1/aklO0RRZt+gzCNtgg0RF5DZ4xPXCUNAo01KTzMcz9X2lyjKst\nmMeeHaG0KvIkZ6s8nYjIZSLGRBnKE0NJF4Is2wjtC0pot6oE/HqIajUFMzc2\n2A2bXda6RxiR+b1as5shhCdhuTtNQ6Qs6XZhI5739S/m7cSXpyXFGLhu2Wc3\nAZq0e8nCpxiiJZkEKMM5tZYcZvV0iTINADXl/fYebo9LUzjrYhuW8vMvKo9Y\n/KVr4JwwtTdnVDbua0cHvNpklr3St4p+zQDhOpOeZqcHPm5jaxuRUBZoE5e2\nvkTSltENfk1V/Xh5q08C/gCvzqmBWT/PBQAvq52owkBAdejBczzh8505Yqmx\n+6Ql2YYxi78c+dXNGVOd4XnhYkQiegBB3ZiTl5XwRRui6Tjlc1D4y2LNYUxW\njI7X\r\n=TiFx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICsID/ggsyBhiFEsGpcWO8KcdwpA/0WkqClh4WaIbs6ZAiA1Fn1a2AT8PM6oXBZqqLTn2FVxK2iT5zNKOgtOVW/p3A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.56_1573448618756_0.035837372217905505"},"_hasShrinkwrap":false},"0.10.10-alpha.58":{"name":"@react-ssr/core","version":"0.10.10-alpha.58","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c33bfbbb035192116ad776d8c9590424992d5c6a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.58","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-GRAJqbBtw23XmVtBrQSV2c16/nswJsvIOC+Od22631cYDLqCutRmBIDOpveLpOoIeqrwp1yHO0Vdw2qlWdjFFw==","shasum":"06a9023edda3672f8a4abaf3ebd83463ba6b9ad1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.58.tgz","fileCount":15,"unpackedSize":31742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyOxZCRA9TVsSAnZWagAAhAcQAI4ZlFNEcwHEP6RL2qfC\njjufI4HKpmfwM3St76ePbIABCvA0Aie3NqbPL4KGXnTT+R0NFf4aJf9zL8QG\nLTXp1Uwayt/j65iSvOxQk7p3O4yQVflQhiFK/uplg4ZYfJxAB5UEU44MKCun\nvIQkJciVDbZZW3VvP/Yefu8JMAwucMx0gAHjEpPuiY4GWCm/C7xXcQUYwJaK\n2SHYmn/ltadez99YhI66X7xevLocRc0JrgtyHgRRdz6BHaAtas3Am2NXfFZm\nHgqisXIpKdMawCYEKD532kQSMN3sj0u8vA3UuB3rJ4CMRYbj+usWieT7/UM5\nrIFE6+tHHkJWJMRs0pEuACpzI2mE9gH4+4g9OmXTlX8XmfpSFTaHzPEIgjvj\nZQbfpHHmEX2i7fp1Mdw5p8SxQ7f5rDRqePMp5mRchrpzj/MCC22IE7wXxUpw\nYs3y7t+vcCDMiscPQ1lrTGiaCqGhy24hhRHW6WkpOd4KtXWm42j7+ASoJJFg\n3uCijpT7mqKzfqKI0JbyIzCO0/o5cSje4A5T2FIyWPdMwAqajqNsh4YCeavN\nmHRaSsXtz2USftlN04I/EOnuiCPqJobNnwEC8pUdmED7M5jEQf+LsRPahUH3\n8NC8ddzDY8vPL7ymVoDD/i5bEmzYicXSRbPRChtnUROMwYd2B4/GIahAt26N\nIWuu\r\n=8SuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHXnQchkWdDz13nuqltZp6OJkdQei2QyltyIzO2MHN9kAiEAiscxnoxTs/6vxKBb2cJrjyd6lAoApaBr+5dOVzUna1g="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.58_1573448792946_0.7011434166528199"},"_hasShrinkwrap":false},"0.10.10-alpha.59":{"name":"@react-ssr/core","version":"0.10.10-alpha.59","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0030cd1565eb8fb2cd9fffc71222ae425958863a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.59","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-MwTZ8yWEIVYhkmPZYs5ZoKMZDwZHhxK9aTjZE/TknJoBEXK+XQ/Bedwjm++Z+DyGm224F0wyRI4hYE3k/vV79Q==","shasum":"ae911292744e8c43b2aaa954ffc2b929afe4624a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.59.tgz","fileCount":15,"unpackedSize":31410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyPAPCRA9TVsSAnZWagAAEjAP/1eKDPaAGoHWd7Er/ZFu\n5k88xDDZ2egYtFNmV6gMmIGToGKV3APlzjAmGhh66S1FGHGLYJDAbztF7QPF\nTM6vvBv0KC7Bz/9c0ZoT53yiZYyjQdvrJbnXfC4dDPDZ4Ek+JUW7mhc2UfUw\nxMS0ONnQmtx4OFQssRVgEmJFCGE0ZQORdFnXieXwJylJyYBMSdtJRqw42gQR\nivTXVXKbqRMr9OFLkqS1XgfJ8Cz//rzJooIh7NIPLCft/RdB5ak/NhU3zkE6\nI1MjRqmTtf+AXr5LNjHh91xgBHmtecpPuiDRuGZO/LmcUSlizB9Cem7a091q\nmrJ6h4r3D5zsz1xn/dWj430rbpexEJRNHz07QK/pXb1NDf4BEFYFOMrIKrHb\n6xchuNE7++wnDumsBs4gIDaEC1Ng2qLFq3svXJJ9OY0LZqFpdWAcjJBfD9TW\ng7u6YO21yW7bjo11S9Ljs+PwSpoRyOxs2xdqBAJvrqblsIcoQkPp0i4ntDXk\n6/dkP5mWq4pDVcjkeo/3gexn5/h7agXQmhSIQF28YBmcvfcFjybKYBpxbETO\nYfPkheMn6/8Zg+NaN43KfeCkfixOh+UcNYb5Vj4wHgNTpxbeU7C4oSdBu4x/\ndz7lrzrX5CJ/7i81OkWTe+y4WmTvsf9p0+PSHm01Vxz5282OsISBWjSKhTke\nQNX/\r\n=Z1ih\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaexQ+qFLjhRaXuMvlr/r6guJDEz87HTmXTxbv5iHlFAiEAggKamSXmK2i9UqN73/dxBOy1Pakb1dKKyj87Log59Cg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.59_1573449743001_0.9399175594539975"},"_hasShrinkwrap":false},"0.10.10-alpha.60":{"name":"@react-ssr/core","version":"0.10.10-alpha.60","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"fce7e4b90ebfab27f2d2aef6aa84a1a923445cd9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.60","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Py83oNj5wvCJ4mlTOe2F95cOWsTMUc4ANF7/xnamdP3g2n88R8zROVqpz2jPEzfsX5zBeYEu0DEWlmpD32TvGQ==","shasum":"16c659f28d35f434a700daaaaa954b34e6246cb3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.60.tgz","fileCount":21,"unpackedSize":38214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyP8/CRA9TVsSAnZWagAA770P/1EOonMOvqYQd17JT3J7\nFToy78eG7uHmuYunU2hdfhCFRlMeptdGsX6vhP37RkpNlLFav8lMdP1pTjnT\nwUgQXuzF3AqcJSAMnfuDhna/218fmOgfgkIX/pYQdWXv28o8z5EKXDPC+FMc\nTuOI7AmaaDOH2OTwHFnyHadEdeCiICcl4PLV3yhhwNl+4ZeIhkAgML7vWP8A\ngEkhGAfecs326N8y0sJoC4pfUhcQZfilGKq2jFkIG15nSDO4qBydFCmp/Np8\nRrJ6XaJWfh2H/gRbcdscTLNQLXopteTtT1FTTfwBpY2p96tj+pExgW6UOH7+\nQGoycwTTHAwZYTUPE+bulddzBlQmHPo+6aBPRyu6HDEQWQ2J4WkZRmQlUkbZ\nOplMgYYItBrWWltTnIAoutYfIYMhUoqdse5E3dWak5xh/rznjg020x4ifUaK\nnF+x9GySNcVH3gTAbFKc1+WgM7bSOictmXlV8jjcq3qi+dAKF/uiczCy/TBg\nZroZInc0QdJISVVJexh95oD4oRz8uFpArcT36RDlYdra26Y1o8K0dvi6/g8F\nrumlz3e5taUiMlwKl1SV8snsbbK7dWqwJPjZpdadqhPU3KCoPj7rS/O0n1PD\nSlypidx16qQi/flFajJj30oy/TTD5iM7+jXiBYc/cVxdHcrkrRULvXMx6Y0d\nzsa9\r\n=Jcto\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaNTISuF13nHS68vb/ZLiGh894OUsiaJDhuABzJykJ4wIhAIOwnr/zVe8xznQsmCP1yvVqEPFvtZwUggjJ8k3K9aH8"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.60_1573453631395_0.02672186607613236"},"_hasShrinkwrap":false},"0.10.10-alpha.61":{"name":"@react-ssr/core","version":"0.10.10-alpha.61","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"14423705977b98842274ff9e7f50a4e2f7adbc49","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.61","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8fLj4cjCMAo+/2MxwIf3scJxKTpOpD3k4yvY7hUvnTEP2uYTrIXnW+KZHz8/IowSizD6u/wEI0hT4LWzbZyrLQ==","shasum":"4851ed2ee03d0e6aa4d9fce04b0040d4651f5082","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.61.tgz","fileCount":21,"unpackedSize":37965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyQFwCRA9TVsSAnZWagAACo8P/RsVkFsnnCdJm0t2cMYQ\n/ppvxFwfl9CojyWSkynVO2iRbrZNeVUeTJLNyN2jEvJ9X1AqpB6dvh+a7KR3\n2HihusueMhROgxMwqsm1rxzu9acylgaXMdBlXXC0vst7VWGJwaZp1Xq2LfKo\nIU/p8YfhpS3b3wCklWScAEBSx2enRQ3hB3lFU7B5TZcUfpDLBT/m0WfC//HM\n4m5dwo0oqZcT7rrSQZT2R5AAge/UJ/gy27ALiV+EYbXqSisN+LFHXHkXlWij\nZtxv6zQSs23Va0KaO0bPmN7PkzTfT4gNetXs1iPaQbnFjAO7Jk6Ky9rNm9R7\n5CPfObRp/BRj+iVvQ+VwZZ/EYT/DdAmmSKgGEPLNBMsdvZSXc81nqrXeCVVE\nFPpLaEA9ALsKUsuwkPsjAFODt0Y6Nvl27/fLCrc5Y/KoGc0B3Q4CG689ucZ0\n2HOiN6jV19QfFi68/BGnxDd/e5ODJVe1kCmJQnnRrAojrW7j/A8KbfQMgFm9\nApOzIE13SC5gAshBKvngnJJblccL4gATERa9Vs3QJpOfcIn6nengXCsvJzXh\nQCDBPZvZayijNXpxOb9hTzHWmBqQb+6eX30pJ0/j1YwpdpvINPf8JvmfsqmW\n7s1TUsYThJ33OKYMqplk96eYl+0q3sLNnn2c9Bd9dkewGvDfN56DNS0MbtkZ\nkeZd\r\n=h38Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4SymhS/pzUVdxaaCtLj4Ddqd9c/u+OJzGtAqKeNsiYAiB3wV9Hzb7Adp341KQYb1mhawxM1x1LK7LjBHAGrAvB+Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.61_1573454192220_0.8448007352764366"},"_hasShrinkwrap":false},"0.10.10-alpha.62":{"name":"@react-ssr/core","version":"0.10.10-alpha.62","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3db6f0d1e88c47596811805c71184d46046096f5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.62","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mYYof/DfRTRFR2sTEe5PsPAPwRjWrigImyKYOXEv1+QgyRe6s0mziCxsPQLVHOxUXhAvBmrbF6XuloMc9cFYxQ==","shasum":"0f6cb76e2b0d4a60f07de0c7916f9aed3c451c57","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.62.tgz","fileCount":21,"unpackedSize":37965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyQHoCRA9TVsSAnZWagAA2FYP/372hxDfIgJ1fAqgqzeY\ndwdokYfTNXq25XYWV/6Tl8Q/3sJCP5mBs9UdMuEkqmZlW65o5v+9MDb6E4qm\nwfKRLrZIXtB7EF89mffheoXfibxMMELRPPmMgK1i+/e+iRnNCF6l4xaAWlaC\nT44Rcr+Ysug5OP/zYb8GuOU5BzG/5MfnJQdhEssd69ShyPFj0V5LLoU71X+H\nMz2tvoWVcXZVXOCNdnqI4rOZU/Q55tm7BkZtD2bp4sjv6cFV+0Ah0qkVUdAN\n4PuaBGfMW6y7ciGH0Rp0aSqdLO9o6b/cx8xEulbXHmQX02emotuq8CGqGhZp\nMx0WoPkJ0udraJ3Um2fzIX9Z71W6mLoX9lZAFEh8daX0CWbJo+6CporyCk2D\ntztMDfsNo46qPUKAWMwnGq/NeHplDc4Rl8QbN0qS4NCyq7jmGMf6XJ/U0qqy\nM4vAhVFx3uKp4ahjDnyy4pfMim1ro8SJdmzZbmIeGDJp0hBIHQseYkcAaI3O\nbJWS6Z3ECmDGAuI2yYF9OLXfJj8Gt/z6P6XPH4z91idyAE7VKTe6lHX75Q0h\nlo/odPR0cog+uZXAcbCN2oNSNS5CzDp+mXiPvH/HtatvL2iwhCL7JFqysgdI\n2JWxPokqpZ6FH/Ds6xFBiBq095T3qpHtaL5FvB/KmC2q1hrbIqa4W6xsH0TJ\ny3gp\r\n=1Vfn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtHfLDNvHopmObFRYEGOs5JjFh3T5x9iCXzjbXUCePrgIgYVXJcQvtHuMdMrG2xo5r75aWWONHmVi1SoLe2qaK2HE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.62_1573454311630_0.23683868228830285"},"_hasShrinkwrap":false},"0.10.10-alpha.63":{"name":"@react-ssr/core","version":"0.10.10-alpha.63","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5e67e919f2dc415e04f481086c0decea77632974","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.63","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-18J3tOi1nnYVOxy50jHYAA9G7//FVbEbXHg1NObZowurm+wqr/RxiN+pUX7r7U5kYFZPU4Fl+1cowHoS7r/Oqg==","shasum":"63dc08a4e4043a31645c72a07e589a0168dd145d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.63.tgz","fileCount":21,"unpackedSize":54942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyR+SCRA9TVsSAnZWagAAwEUP/i5M8J4JgYFSqbmDIY5z\nZxqsasRmrx2S4sLw5A5kvsSqmPRvjkrbaha1T36/HrPF7mviOMNl4vYLKcna\nT+euzbtfQh2Z0iaxka4ek8v1lz71neyOrvQ2nYp+/vZaLMSv9qrogw9qGyrx\n5D6K/s15YpXJOUIfB7T6wUR2YVP3VrJL3SdsM6s1987n8Yup/KffYaLSeaMF\nWkgrKKq+hsqmPv0AxsTTCLIBFWjvrq//iI3UH0xkCuIXSz6IxCOpnOKOXwdP\n89dy886p9q8SFvnqI0deomLSOPFTDrwFMFzXf8gVn1TJtRJ/fzfEIG2jOkAv\n8qqX5ZOve3ycQ9UOIt4UU0Ihn6qXlvt4S5pHI58zytIoRHH8BH8ucAQOQmVj\nQyVFk+Oinn+9EN/TI7Wt0OQjX0YOVfsatFzzjvH6qhc4UT/xfEVCuzNQp+/P\nxig/ZwwigytiJezkB9mcGgVd3mxNtfdAW6f+KJjPJN5Maot4A1V0XMz7PDDS\nFZWWoNkEPfZ1hWSqxCRCbVFqJnPLqGhWOnL41Fw6z6E3j8uxYlxJqzUeQSH/\nF3F5ceEnOZ7B87WR6W5z2yyMg7EYhnJHXCgrt2GHYjftjW/+DIEInmg2oYAh\nQstKtbkmtMs9t2L5T+P6vXua5rOdmmwbaPWJ2vstnASC05b557Qf0oy1TZp+\nE9ak\r\n=q40S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjj30qb0FJTOFObp7KKLV0KQXLutp5Lls7qA8rLoDUxAIhAMvWv7dmrQynz7eMvUTBtoDPm8QdBXvENCl5QZ6753Ce"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.63_1573461906001_0.7805228727634785"},"_hasShrinkwrap":false},"0.10.10-alpha.64":{"name":"@react-ssr/core","version":"0.10.10-alpha.64","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5b7438dfcd26ce2b1e7de48e21ce9f8c50539cbf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.64","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lydqDJ8mYRkRma2HiUwgQF9IwQ5qaIgE5fiVmFtkmT+GsKnkSRwjn6enMySYS5KbnJAkDNIKpRhEAyPlJl87PQ==","shasum":"5e183ec8bb1306e39a83b2f6b7da2a85fbe10c69","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.64.tgz","fileCount":21,"unpackedSize":55086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySBACRA9TVsSAnZWagAA+/kP/1XVfT++ySKC9Ek9laMN\nF6DnJZzj+drcYsf5as4WsSM5wIOrKbYKOjSrWu8VpcXOQzVJyYDFQKxoML0/\nd0DvOa8s5Hy6kCpHso3amw5iUdxc22m5WZVr0Opei6hNK3cPVt5z1/Ctdd18\nDm9Y18HBWXoF0fu5XEybz94yHUqPRCgYuoDrN8mdJAKcFRSXTiv1IfiBRDln\nIRya3A81ZjKHchpRmOoRVKHRGaTB+hV+mcPIOVLTSpc1GPDzNJIwkRbmYLJX\nibQIszhFVTHhLsUvSpb4VKo40j7ZpNqQxxmpee0XjJ818U5iFSFVLnqFKKYW\ndXnvh5MlV+wHEZBqaBinXVV5d/AtKRqR+mXEW3JBPWihfS5bTGqVWGfFjn09\n5+5uNL6EJUQcjRIGH4/6ZIK7ySl/h5ptRNOrx9RjdM/4H9IvtqSTScBZf43y\nVGzXSjUBxJmhX6fHZzK4JV2fRqnjjiDHBsEVH25+d2e1g5sUhFrgs1U2NR6k\nH9AY5c0npp+UjFQCcIkoHW1FL8UjeFTBTX8ldWE+1P0zltxANPAs0V0J0m2t\nOW1+TEFOAf78MI4Tallu+lEfXFo2YClPbKY/pAZpKkd2lFsgRC8PDbjI9vLk\n9CBMczI+2V8GOkmIqvURLM8X86sCKCZPMi+Ay9bqPtQMAjFNJPLNdZzCLVTc\n/OVw\r\n=POV+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATO886UHGJADENy3lv+KPIgCmZDj/UJlPXt5H2cqJToAiEAxsA2KiBoSygaei1pVFDHy4m8352EM9OUUBwS1p+CZMM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.64_1573462080328_0.6427983149829872"},"_hasShrinkwrap":false},"0.10.10-alpha.65":{"name":"@react-ssr/core","version":"0.10.10-alpha.65","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"69913358bd136858b92a28b5498984bd18533c2b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.65","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-EfkiCnCBbl8bzNyPAurthnmiZdKFPARtvgl+dbnq6lqf4tmoTwcJ0qgWNsYlkOpL3l8JOZYzJL5ctbu/S/XGzg==","shasum":"7e8f19a7135db80545d28643040e55d90ce9d4fe","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.65.tgz","fileCount":21,"unpackedSize":55212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySDGCRA9TVsSAnZWagAAaa0P/Rlry9cFWZPo3td+GtFy\nXrmuOiUZNppaoiOvZlyqmNpHB90rGPSU1zhoS8mg3as0xiC5J21sWD8NOLwe\n32AC1sqO5tjEQCV8vow/KoUP8R/va3wLb5NjRgGRuxa6J2DaoouajMr14gC9\nkSf5+Ie8vgzSavR6N28YatLdNSSLT6zT/BdASJ7s+O0riyN/ejfqJQOWC2CS\nKT/t5NpzP08ZGwwS+EIPJ276BAwTgEYnVf22MH/XXkW1AZ6MJzuA9PNaLcYf\nJPQAYizS40IpWQpq6MKI+N4YNHUGPLaLNpcRON1q52lderRUeeLBxs8CnWpo\nOAduRuSWMoY/ZQduMYV+IToFWz7jNDmjmTzd6KMir5M7a1RJprjyVuZ7g77s\nBWtDC1Z7smOrSvAnnSIkMrbp6o3HoL3trxApWbIo+rb/Kv+2K35I/Lvcerhf\nXodZciD9U6AtPDNxcQF3JE9K0NDVBUL9/u6nL+gUDPeoV9i94dLvBxxHDnsI\nStv5d6ri7dAZ4bN/yZyhBdwZN+teCuSdgibISj72WSu/EA5DJdZZ9cf1UJTO\njkbnZ9Sb/gAunWNC05WmH+tIcrJKf2FRVgCltF2sUhb4vMLnWqiVLp7JbHzV\n0x5vEjzd1DtLedEprKar6P9X+xA3Du9guWyBbP7Qj6cr/l11nLFvvo0Elw0v\nqgOG\r\n=0SQs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELVrgIJ/x5mIU/zODecnS8uTyUK7jhEA1QF/HdClWq2AiEAoryQZld8Y0guGveWAEuYdXdr7829anDfTPcKD8cWd6U="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.65_1573462214100_0.9225173369409707"},"_hasShrinkwrap":false},"0.10.10-alpha.66":{"name":"@react-ssr/core","version":"0.10.10-alpha.66","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"49fdf3f8daaceb621f1969967bae963f02145236","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.66","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5+JjKDgY7DqdSe3P7+wOYP9AHvYfR0Z53jQycqIYbM3yuxs98BbBTidHPpa8tjdJUSTteTWg+Y9G99ucgkmv3A==","shasum":"3d042d0ef1c10a6972e93b52033076e7e9eacf5d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.66.tgz","fileCount":21,"unpackedSize":53756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySFnCRA9TVsSAnZWagAAxiIQAIYIk8aixmrDvggoFcDW\nVD4jIfj8jsadS7MhUHdEC+aEcDBvodpeCuvM53OPAIWsS3WipQdwHe6LvzPl\nFbif4jS6tZx2vCCxtz2GFvihK/PZIzgViNoyOAn19k14iGh8X5Q6ZHuW89uJ\nzW+gts8luPcZNiVXSfufUL57kyiflAP6ariQyckI2kMpDo26X1enNfzR0EhS\nACVnPxEjS/gPW9VlteECdLoHXkuTPJksrW7gEkb+/Gy3MWzbNLeXRRanR3Kt\nM6YLGiaquMCwhuZE8uNDAZ25hdNqlYHmzYTgECDazzNHxRbTPlTfKn4Hn/Yk\nBdjbhI33bwQciMUmA2rNfXW3G3zBlVSdbHD7g7FiByXTeEZrTzZhp7MJXaYl\nUDLGpLyQGj2LtZtVK6R3jNcvsHcEuEXLo3RIF2yW6pJOQuvDb2EJyvZuoASp\n4sbMNEr/qhQldMCrx0u3EpbG1+r+SSugfaM5vqvfHGvAgs88EPRTCXZI8ZA9\n0RnXeHjb5yXvVXT34UhJfVJslvnC+ppv61DI0k57nh7azMpqwdXubjxRs8AU\nnHjgx+h5+gK2OC72ycCZCUBMQOjU441kyCYVIt93nBEA28ang2WGtykZX5/t\nRO1WEyK/ICcP+Tewq70hNUVqe5DJrM0WRyeUrwW0K3G2DZNoWXUuweuxxxC4\nbw4M\r\n=3cBO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPXdQ1bI1PPgvOuy7o0zY4bcHo8P0kY3CMw+uUbN1WkgIhAOoj23i3Gh8ubwfQGl9E2jT8oI+heM/QIlOECMnEujZr"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.66_1573462375464_0.7051035041247087"},"_hasShrinkwrap":false},"0.10.10-alpha.67":{"name":"@react-ssr/core","version":"0.10.10-alpha.67","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9960d9af0f18f25e7bea73a801e12b1ff1422fad","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.67","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-U9P5scFot1nVmyngEc89s+fEj69N+OR9lae2LOb0oYjIvcOLGnZWuw1PyVs3j6wrxUapTXbuQoxhJc0WbOoJgw==","shasum":"7de3bc5d9045b2af48460c5fb8247d98c90bf753","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.67.tgz","fileCount":21,"unpackedSize":47378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySKCCRA9TVsSAnZWagAA43EP/0xYhzrI1hOi/uZ4fh9l\n+7XeafOLg3U8fArGIhhKRk0jIVleLOBVMx1I7IpTojpQ1MfvOWYIZaiB0HUI\nqwJC4haMyQRG1IdriQkECWD1VQCV4G8CrjywGv2YJPXzdAYqbqDfK3VM0iDp\n+AWGzakfczbElEjlHZmjFO41rfrApLN1SoYKQ7Qh7kknJHTD32eE7CSggHMY\nGWDoHW6kMKiXfQjHkGbV0LeC5JPlu4Nh6ik8Llitvqen31rqYuDENRsKqCen\nfI8L05GPde3Dpfp1GDtsSIll5VV9sdvqajkTax+syffAhJzULYM12gEyhrl1\nd5qOAIA8dESPWS6b+EOaJD6JHyU+7PAYF2V4zMDCdZBSD3QFnyLTRT0ZQka4\n7aM0YuvIDJDG9FWlG9XjqS+M4l0tBBhXgZQ2WWiEH29Th9o5wmCqAlvZ1r4r\nhDHCsSTD/7FdF3dtrXEdUDfQeqJI8LEGJZ4N8zF0n8KNPXDnauVd8Oq1m+I9\n4GpHxewRH+SsGaMPY4eWvM75POqEEml9uoNE5u6v9jWzgdpYSiYHkas9NXyw\nkV6UJBNVFHztBJ5v//BgF2IASC1OZe2Zp0yv1anRPXUjAJVgYNZaa8hHmXcK\nw3DbqfgQC2Gk27kYw9K0vAH9UvOJYJauqjoZzMKHiTeu5f8WmRDsU7TrerDT\nsPAk\r\n=cANt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHeAvhY8Cbt3DN8iuy/YtttD8A13P4tzOjVOELi2VmQjAiANAntHHvET3rUThHLI0lrDABku0Pv+KkeRN1JT+tfN4w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.67_1573462658117_0.08665414895366008"},"_hasShrinkwrap":false},"0.10.10-alpha.68":{"name":"@react-ssr/core","version":"0.10.10-alpha.68","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1178d0c3a9227e51085da3b0062803af07407c53","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.68","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pTZ7qKPgNTsQwPwxwLqfzUEG2HhqcgEbbW7S76uvTGHJht+d9OtJJ200yN/aGIUZZokQeku52NUBZ7Ht+TDt6w==","shasum":"68dc7d86187a72b094490cb5fd47c2eb8326a229","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.68.tgz","fileCount":21,"unpackedSize":47328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySL7CRA9TVsSAnZWagAAxr4P/A7J2EjWSnJ7dOe+J4dR\nFBCTxphZApXtv4AxRjjoimgMoVUVRlZuAOe1/ylSCkQtEVG7X92+kJxSVfj1\nSb8Tun8sLatpn2hjwozeO/4jfH8jq72Wuk4U5xH+dPqoicWGV6zLJkflHs4Q\nXHlrjHHoixselNFf1h3RGHP7eBxa1CA0YbH92PhcTDLggXamMNkpWU8rxtkJ\njEPbybsfRW/FiW58bR8LKjaHxL+lEKzXaP2kfWkHhNAIeI1SErLQRqAYxCwG\nK5xBLwQffSuILmfLutQONy65w+lT3EJ8sSQrz3jIoqh4VHSWwzIZ/j+vF4IA\nm2352pxPkzUfRzVmUs0uB8rnpdTSQrVl9ktsbYOeoSOIEX/aK1VIbUO98owu\nf8QCwjKsa3j8LwFaeKr59D9V7ako79SL2Xc18eThQhIwqBEuYNETzsJeI2j5\n+X3LEV9sw9TlRsjRhX/AVSglas2hpdcGEcGZmNEsfxmK2GiNZNEQ+v5UMeIs\nBxyQ3zek5IQgwtQOWMsSfqfHsf8m0VjoZG8ms0MPcvu2OZ/ccJlZRQuTSCMk\n/YqZTg6eaZapDHVRZmTPPIYFixw7Ggyy5n9IKxu2iWzj2VvHf9ZBIsLKKqrn\nXf/bSC61X16/YGHtl1FZqzSI0kzgHYbmT/NXQhzhW8YD//V3LSiYJ+efYqsx\ntZl9\r\n=jrKh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwnFJpe+w4CAMHCAkFNFN2LHFQu4Lqj656wwGB5fH4GAiEA/Wy9yr+jncH71xdx6B0z3wvs8pEWWq33UXC/7Yz/DhY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.68_1573462779151_0.5929884320229264"},"_hasShrinkwrap":false},"0.10.10-alpha.69":{"name":"@react-ssr/core","version":"0.10.10-alpha.69","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"18061a825e3f50b53e47ea2c12cf60e1bbaefd9d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.69","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-i0ZQDTdSzbrKjRx2ky4ab78T0Nk5T45a4aegRUvPB0wmOxGoyiqrUPn1n/M1MK4MuzbjN4ywFzSO/gjpDHTwbA==","shasum":"6a7db65d84e381eeb55db776e28eb14ca1f4595d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.69.tgz","fileCount":21,"unpackedSize":47171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySRFCRA9TVsSAnZWagAAVaYP/1+gumkucn7T2DMW1R4z\nsG5XjzJF4nR/MZax1uCyJfBKJ+1sSK5GvavTyL5CAjcHgpfM9v18mP/GcEZA\n81KRGIZOLobuQpFgbhUUBwckjAvz81dWXlLJitIm/MiVTAYNQUhxIpF7e9dK\nuS+yoLZox2AUzJcB8plw4bGdUv1Ysbz+3wQI2jczCsYdOYShtJMRBSyqluCH\nfSLArtQ5+fQBqKrI+oi7Udwj+wZVfMxI32/u6Uh9nHtGzJlRGKyqWV84932j\nNm3RvNszLsXmGYUDBjdUydrqGkQtFfQV1J15ghCEDK/ACUZasby6kkpF1cbg\n7uwPrmpb3e+1xKlgm51wFMifd6SPG8ZfgwHm3K7M4r8r5ae3CtJa7j3xhJug\nhPWe+nSofx5Bfg9SwB4neZ4Q5B+O7Iess7R8X/rhKgWyzgWW4S0+ewVVO1P9\nOIllh3Pjxh2ikzyyA90E5OAsXO23dD/3NQS9Qa5j187rDzFNTMisfGtHOiL8\ncpe178yokR52pK+Ore2vQKUbiIZXHh310lQ84xpY77XzyGvhaCI5nlrImMkG\ngg684Sh4whXCDXmFn7hWEPCQdfyuBNE+zMF5PKGXXxp9fMe9doXZElJsg7EN\n4MN4yn7F7lI4mKQvPStxEB1Iy1nFFooproTUobHzzCY8VBH647qE1IIfk4oB\noW+o\r\n=QVdU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+iSPcsvkNPfcamw+6AcaKTcNTEDI8/7nEcxguU9Kw/wIhAM7hoLojWVPDHMd5Pzb2PJ3uUYbIk3S8UfSTmoUkK7AI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.69_1573463109444_0.7552060175756012"},"_hasShrinkwrap":false},"0.10.10-alpha.70":{"name":"@react-ssr/core","version":"0.10.10-alpha.70","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"aba2a3b433252e02f3f119fdd4ef720ff3a99438","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.70","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ysONMlQ5Ddvi+fXfNfI/+fdeKzrjya6576MQJ7TylpZ8ro/YI05z0NGOV9HZGCD5Ab2hOUlN9EpdNgy9HFzrCQ==","shasum":"8f003f44a530762a73a19eb1ee71ae17a6f4bd35","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.70.tgz","fileCount":21,"unpackedSize":47219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySXfCRA9TVsSAnZWagAAvlAP/iEcy81aH44rAUwiki1l\nmre/ihrLXJI7BXjt6XjgJiccj14HwQ+LctF7FicRUnM/39NeUFySvn2S4nxm\nu0VRsJ+SUb078IXk0bD56jctJlf3lmPsKZEzHICu4ZO8dIz+PUqaWnBUNMRr\nPR6NK+Ssl54JIvhfZcK5hccPf2HuhaCKb3SV2k+MT92MjsIxIsAfx3tf8nuH\nylgeDRsHfhi5ilt5e1CP1JHgFxHrGYYHrKIndHA69Pct/O2WrbITJPECuGyb\nWIC31MWD2Ph4FKJvp9VO5dFH9NsWbraC2j+Y28waDJ+QRihnZ7+qBrTTnAIQ\nDD5tQw3rwxg6OtfL6slAS0LiGfjO6nqvyxeAXWm+QbGkZjKdqItyUrJH3xIp\nM6y7njqgu5DmvRsqtSZlltYjerANzH3hjgdWi4Tpg5mx6ZCGMB7u1I2Y4/U+\nhWcYxrVbTtsFqkTAF/FSbvBh65L006i4Oudm67tX/JJPKx2CvLMqZM2ZBkQN\nNXgDe1Qv7wpgreg0DnJ6oijiK5G4BGBbmrSP5eqsUCIEie02yZ4VA79wsXQ1\nGqeNMRKChJqEuqPreQ8xXoT+f8HeOszyQ7FUJh+BiFnIuo7/r0Ez5aV1MZNH\nD6xtSAsEtUhVXAY2ngfjnkENSRKpUhWr9RchqAycx8biV/wimV9W/0+vTRNF\nAP6b\r\n=pSMZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrFBU43s2XJAIXW6+rB51zWohVYRBVKdjEI6Waav8xrQIgPe+OE7AunvWrCEED0YWj7V/QIsVuN10PaqXL1hP0mUg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.70_1573463518846_0.045053304308407593"},"_hasShrinkwrap":false},"0.10.10-alpha.71":{"name":"@react-ssr/core","version":"0.10.10-alpha.71","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e60108a9aa3b6d40db38aab8bc8c386d93c276bd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.71","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qUtUvp5v8gOBGVXPKo7EuD6quHUomWDex3v9I0t/d4yfv2pTZD9x64xa2iMo1wgay4shlRxqVkB5t9zhPSorUw==","shasum":"c66abf60f1cbeed9370285035859bf080e0412a5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.71.tgz","fileCount":21,"unpackedSize":47693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySj7CRA9TVsSAnZWagAALRIP/jxjrQO6Jrbpe0hYe7ZZ\nrkhkuWHFPJbxQdlJJR5cVGOjPw0v1wGzfF6GOeJ4kMtuQDxdQHnMLiGqcTai\nxu+UoXjnHbCQqvbcxDX/h5BzFRf5dPU3iXtfXclFN9RoaHtuNUT3N72XrIX/\n+WssLElSj3tKM+ZCaUHbxD6f8q5RHF+oUuSLIIUoTuuSECwqLbQO3EgPn52c\nUFLHEgoccTy9R0jRSpzTzu4DzsYTGUs8fQDbKOZqV5G5x66fzC/m3qSiFMRd\nIw0Z2pHQkn5rrts8FS3cj5WtccwEhlLvoEczst37B/NdtFexSs/WcBM/peZY\nN2WdKSdlD/qNMLBp6zLJGzR5tl82iyURYqft+WXgvbZRiGS3JbnmyOOkCQbq\nqQ6B3t6aBTmlQOVke4O7U5MP65+SaZgWrBKyhY4dsEvILXLQQ6Rz8a2XkVjr\n7myuSQVdonOKWMiIKHUc1mlFbuRtO7bAdOr+CAbU3A81G0BwNdEC0LRJEug0\nWiODzFJjBGZ6xNZX75wA/u2tn4XqOyRK++TglqEOnkvQH3raVlOpJuk8QAz5\nutihk/aFlNNEhhPzrf61cdMHPlePkbLBeJdw4SwXk2HRCcetSh2ibwJw+Kwq\nI+aDa4jXCibPegY5A1w7jRuL1X62ttiSTGfIHqckAJzaL1GF/xtNFqaDyF07\nWVQ/\r\n=Ih0z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGB+mjSoDOKnSOoByOk2EZdQtcE1VoxuBjNG385CT7swIhANgWtGw7EK4eS5jlejzhT6dajLUTErCZKibqlHJAbnxY"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.71_1573464315117_0.8868476558082989"},"_hasShrinkwrap":false},"0.10.10-alpha.72":{"name":"@react-ssr/core","version":"0.10.10-alpha.72","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6f261bc93f91be67305db2232b28c19b0a847e12","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.72","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-MBD/n/EXKMmqtJwu7klIycA26XCAUNMpKsggdKVsrFLGDj224LwUC8hPejs52somL/V3vs4Qo4YIG8gSC1a5Vw==","shasum":"3f1df4a32ccf64e13fb274ec4fd7d77d8d6c0cbb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.72.tgz","fileCount":21,"unpackedSize":47607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySsDCRA9TVsSAnZWagAAx+cP/jO8eGEotZLr5yoqXoiW\nEih9OdcPqUvKZ9yDAvx8o5KWag/momLFebRYucUp9fe+5SJE0Ojn+GsasSb+\nDcXe49XW99wukNa+4QIihiMUUGnqlHvKDIgRMVNKqpDIdJcHQDJ9mox/sbMM\nhGNB12vpqyidYt5dFoZJNXCC/u2v7ptUB+FVtWt5wOcHLoTl5grl7JLbmnSm\nPtJ7g3yP2eq1b38xkRlVB/claNmQz7UkqjjUIeJJ91AavuaMNcBsnAnqo3UO\n+B5AVPABZQGPxRCgayaQe1AujnbBPxrkxSyLBmqF3KOFwjXrTPNm+6CLishB\n1UInjC5SqErDZyj+jxTHv3CW6fGzX0WnHetG/QHSInaK4iENjFcEPTyvNwVz\nYBjGy+Rx+M91rkSjaeDtGJXXSJRlT3lx8G6Hz+3l0uyf9ZPBt82nBoWgX6tS\nOr8shw5PBzMarE0E1IOjetGDJkSHhH69ZcIyYNBqHDW8uqJmDlKTMpUHymUQ\nL0u8XvpImrEL8Hq3gKSEuckzpu3+A+/cG5jNz8L7nN+ezMeM1Ln2xpn7H1zo\nM9gtyV3rgePl5svkcjXXYdS3VCMObP9Gd/paVaE9OF/bEYaz9vf6A40IV3fl\ncadbCS61t3p3NeDWZnLyiy3ZT7sS+ugTdo9/zUwlBP3EOIu72T6jauLyRAVx\n6qIP\r\n=C8Vr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCClCSMLTCH/7chKi7yBY2BAy9nXthA7/kIzLIqucAGnwIhAObnovojul3Ep2znccziI9T+o64lymMOXx92NVNcUm3E"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.72_1573464835500_0.7329215118033257"},"_hasShrinkwrap":false},"0.10.10-alpha.73":{"name":"@react-ssr/core","version":"0.10.10-alpha.73","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ece11da56f3fee8b7d3e4beb97cecdf9c521621b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.73","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aoZG3FTOcZWVUCIAwjkx62FyOfQm199cbwUzHBd72EoMJslpu9FgfKG6VsRT+4l1KcEa+k7SQWHWfiNqsnSPOg==","shasum":"c786455e4762abeaca8d7aea26c4c0ac859c0385","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.73.tgz","fileCount":21,"unpackedSize":47479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySxYCRA9TVsSAnZWagAAzCsQAJ7o2BLPeVl0uCTXnKtL\n0eL7ym0bKD1w9ov8jbuMeV6rhxgSiMuns6sWx7+Hvp7TNsm+XLxieQ96Bklq\n9Cz1BQOX5E1emzvLGbPf69213bxPD8TI95RfY7SlPY16+pMCVpN/QVVp945x\nAcD9wyXQIkrow770ulCDFGnaABrkWDMIAsH2xHOrdiVkAdAwWYvxGi1D4FzS\nwntzEQ+COrg7iWfWS8eyASl3VVFMNrpQj+Duv2s7rhFqQ6EJ10bRxxoNFYTR\ntnrjG/OIkAJQMDcGkDkQIU82+sJyr9MNt4ifRJaxUYaZyQF4qzkwiEiuIvM9\nX0GLSxodDbsoZJye+j+Sa3C4lelKV2/80XGkSExYu2aT6LfLQNFzCfmJeRPu\nKTPYfJxlM34EOlgQ9aq2yRkY4jiCHUJEsUIURr2mb4oifcQA1HQC6eIKjtUM\nATlNYZawpHkXVlioKXgvQQhp+upxoxcM7ZbqTHDXp9KuWIKXfnTdpsJMOXt6\nsXMX7h+wxunwed4Z2kuqDl69W0tAUeMl+57Quk/0Qc7sZOMz13fuEg9MLzuh\nFIC0AxRSYQx93JSQDHkF4o2/ug9rKLsf5VMhpEYxLUjVzQAJLfTzXAXvcK6J\nKmuV/NKHUKeUREl1KDfilXw6NhhfnH39cJhtZkjiw1ebJqWewcDsLF9NGpWd\n0ceE\r\n=++Ur\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIcbFLgvJFrCOam0GdngEj/yZbLxbccENoiVLjTs0cCwIhAIBl4nEVqBAf7obveD1i2+RSNHtxWKQ4nc0QLLxFsJ3f"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.73_1573465175766_0.048581780873683256"},"_hasShrinkwrap":false},"0.10.10-alpha.74":{"name":"@react-ssr/core","version":"0.10.10-alpha.74","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a22ff0a356bb0ca019e9be5fdc8c5644284d7cf7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.74","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aGROnDG35DY+7LPdkM7CWYlvOvtalrF4y1NIa52RLzsdlT/DYDMTcdalygsRwxVmgagJYQwctdPGwkiuYrGDhw==","shasum":"043ce3968b4c852bd171041664016950f32648b0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.74.tgz","fileCount":21,"unpackedSize":47485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdySyoCRA9TVsSAnZWagAA+bEP/2oImyYl6Md2CQW0NBA5\nDWd4f5dz0y1AzOZ4YDYWxLsXFlDLpcjXYHF/53pebGdB5oJsXMkZ3esf0B6W\nZVivaX71hICN1nIl9e7G2YcziA4nEWlIdbbshp6/Y6L1Ig15PEDQ2KLtJyzD\nrgw8MK7r9slUvW78hHTlFkq2KhVQCmIYHZycnU9cvYqy/IqdHfp+p5Zzb/rd\nyceTYm4j8pmkUI8B/v4UCi37Qbcp5y6+hBJu4uvnyAJM7CTZxWd9t0muW/jR\njtHJ67+z8rGRv6zGC0bVxZBgy1Z9YUY2wRjU1LgA5G7KElK6uzpf20aeRV7m\n1PlP6t8H15VPxqcxP/2UXq77QER0kxUzL2xqzVN8t9wGhA0+aFpvSBno1+zz\nFRwAjT64withMSmB2RRr0S16c86sjOtJK5UBO5xbBjRiOmerzr8dx87YsYfz\nSaazLIYS95HajKkz1kpVR7BAny+hw0j0gpR4edxrFO2tjmRoO6pQEpJ3upSN\nbaaMu0dakCuH5P8SFfsGSdKApEjCiIqj2FnAhXypDLuMYjqO4I/jv+kV9kAq\n0IxEsF75Ag9LaAtxM0RiPOMjvkXCDufCOqbEf0X/lYXBYsUAGr+8yOkZ4tjy\nlVFjYxUZzgFEMhuY5/HyeEC1T9AvlUjwZ4lxJqwQoLPYNFCKZvYo4MTHlNcA\n8Smd\r\n=AQpW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEa9dRhFDXzyWMVcnHHekpVPHNM9794RnCFQv0d+Ag/+AiEAr12bQhmpGBid66MFJCOhxs6bk8DHaa1hNKScGuxfN5E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.74_1573465255878_0.8503852707305326"},"_hasShrinkwrap":false},"0.10.10-alpha.75":{"name":"@react-ssr/core","version":"0.10.10-alpha.75","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0a66b846315914555e96e13a0ffe7aa6b3298f33","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.75","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XDqPWzzPrIdHJy8x/LeJp/bUehshbHKEhhKhka9gmWEO3qFCC2INSBaMmyrmEdHu6YKyhrPNwaN+9UHLoC6Bgw==","shasum":"2c6c3bf33dfe12137882d433072288c0c1f0debf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.75.tgz","fileCount":21,"unpackedSize":46100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyS+oCRA9TVsSAnZWagAA1UUP/01WgXjA3Gysx/9JNigA\n7XNZ/LPGBH7YGkUhRQZybkcIbHiCjRTyZOyk04hT6giiV7ktDl5s2Y/Q+4Vx\no3CGpK5Iz3pyNpCw5+dU5PiZo7RTnP2xEZ8G3Bmv7k69YO8v4KL6E3sJHxQr\n/Bl8RMZmo2ii0paQw4iuKVyJn1+rPo9zeqAkmaR8em4+DimkjI14xiFdULQq\nwJSUBx23glSr05ly7v37ilUaey88VhX50X2UI7b1WhhuvAA0fjxqZ1+7WrBu\nXcel02ykiODs5LLu1Vd1VHmkyYDpNdVnu0OAO1IBjof/oOipZ6fdOlXpOAbi\n4FJd2Ks0ut0nlPvXOPiADTJe+bGs3nEQ5nGvk0fGyQyIkQ4RjHk0XepDbGEI\nr5Z/93kVgKNughiJ5P+pmh1qn0vNDh22tflp3PwT4padpj0VRs2MpCrzAdq+\ndSN3wQ44lngyvaLaPhFv2z27ZaogSufqaMFrg43DYvZ1M8kvn7SfFlpasKIA\n+0utI/OToCR96AHhYlvcVHExKDlwLYSrTs+v+TF8jtl3c89aIO+PljlOnEc8\nIzN4teq9aAHi7MPmh+EMmPmD9yNJZXfGA6YsINPjoUpwcVXjKUMbYiNLpoaw\nLtXLcWq5b4nZ/cqz2cy9tF9g6tVRH7W2eDGC9+vmqRhZDQ0Ly6JeaSvBmYtd\nQL+6\r\n=o2dz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoYL1/eFX8J6HRo7m7s2yNFpBwKzlQl3+Hb34VOpez5wIgQ7aj/21U/M8iIrWTN2G1bgtejLKsGh0PDT/Fu9ryUAg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.75_1573466024075_0.15928885389250813"},"_hasShrinkwrap":false},"0.10.10-alpha.76":{"name":"@react-ssr/core","version":"0.10.10-alpha.76","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"706979d23c7503fecda88d6e491cd264c68cb54c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.76","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-AeGUz3mLkD/0wPIE+wly/EA9sdjJkxhFEIW602G1M+lKWXYLf3v0+pgobQr3CeO4BZUsPcxQK4r1VcdI7KACdA==","shasum":"c364feb826d4bc09e4b01118d079738f378853b8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.76.tgz","fileCount":21,"unpackedSize":46128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTD2CRA9TVsSAnZWagAA4+YP/iUW9FGdm8pIkEw7nDGS\nvbPAXNtvCsrPIkexpfz9p7pyPSUdqVtQYCRKXYKo4lhjB+Aqru10py+2+J15\njHqtq8DfIhCrsyIzir3mtOiZqVvP2XWzJfNw4CgFzxwaTQwzorSaoDKwiaOh\n9uYo08ZC1N8Yv5Z/Z+DFja0BE7Ae5a8QwKbs+tSeVSMgJ3hoh4JtpEc2CUET\nl6lnWWLIkN9JkP9rUCyii8x8R0nLIW3E+Gb9f4zv1kR3DuOSxrPljnt9yoCN\nupkdmTXCQdo6IvsuHV9Egkk454xJTkpRQ8ufks5qYfi0urbAZUy4YRynN1oC\nQaSVATM7q/+f3Vniwm91zc4htQD7cdCnY0nVX9cc7DOK35rD7EMY6bkvQm2s\n7p9JMLETwmHwGvQNBaF8VX2vvP0uNHfCfecizXB6CSjt7A6t0LcvPGodAHeP\n1ytCAOzt++mtjQpup2iO4xDF7tXae9Z1GeyUqRiWRjMRySnFmNxTTyUdGtVQ\n6bWOz07iW3CPWhh2AqDp/8qTg27kJVt+qhq6FsRpmTRbaOaSca01oLVGW1hd\nOxezyeK8fvm9icENmhUCQplIGMMfjyhd0vEJvD9P2Np8Z7K4EfBj7AVF68MS\nvxINJsaq2+mSCZBc4qp4bYLi+DboDMcF8HREgzj0x0M+nc68ac1Pw1qrmU2z\n28JV\r\n=V8Im\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXOMDV5/11aIQtclgbcBrNyDb0tdjBR5jxNxirxhDy0gIgJ+N3RcJAtxd/ImySmnbXrnNxdLSD0IwLa9iRzueV1hU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.76_1573466357976_0.864790239621023"},"_hasShrinkwrap":false},"0.10.10-alpha.77":{"name":"@react-ssr/core","version":"0.10.10-alpha.77","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6e82a81881518cfbb36c3055def53830aeb1470f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.77","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ZbnLlSPxAJaKIms6wBzSAKA+/LEA+lnaDzzJni/DR0zLlYtZd8jyFHZ2n2rExV4OgRZjTji4yOw/6an4ZSixbw==","shasum":"e101c84ef184154409164d4b801da697e5185554","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.77.tgz","fileCount":21,"unpackedSize":45893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTMgCRA9TVsSAnZWagAAd10P+waLS7WF/isXPvOzvXdw\nl3nWVPjdUhDmDR1/EquL055eJDNxpAtqBEwnOahEljmsi1ZmVCbORXRJi0rk\nmFpHJBx9vmIxt//yb5x4tyTmiLnJkUBbL686fx9KNl+S8lNaWVuRfnXCuGLi\nWCnRRiQfK37+hlPtB8L7aex7nv9wYNEM4R8uI3ybDsm4CgWl2VpQqQZe2XF7\nK8w2rjWAeI1INs09y9rAOEmkxD+bBNRtMus7D9/zbpmR3TRjC+68HTiw8GdA\ntS53ADLMURc/fhDsz78N2XFntFZ4BQT1oE22DaE3SX8pqA/m3pr0vOUV24du\nVkngIPeq94ntMFKQVgzko+1F+TnKDh7i4u3z8UzFVJF2nTNnVLjgfwkGlnyK\nWE5fy35Z/VSc9ThX/+s1iiprDCBCrYfjXky4LOq6IkgwIjayHyQoRp0t/VES\nTkuEFoVn9iSt9oq/DhIyfLCN60xQvUU4eACB4zaiIoFROp8p50a2iue6KDbu\nWbkelXHGnyhA3ykRW9CFwkm8PlQBKAnua96WdHzYoMt0+cASkUFkd23Ym+F+\nPQ6q6J0B1gbZVJsFmUbFKY/K3De1yo+cKECuF4/u62U6UOQnugm7GlWhDZnI\nHsP4ho/6Pz17BG+1AXacIgg97xPKWF3atY3GubAPRoAKasHXmvboPa7cV1aL\nhagF\r\n=kVfi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGqs3tAPXR4hS2et5pzx1LClduWAyaeuuXz74JvJcOltAiBtoduui4/0U74HA1cwkvvL5UC5UoYR00HmvtdauENH/g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.77_1573466912143_0.527415913484611"},"_hasShrinkwrap":false},"0.10.10-alpha.78":{"name":"@react-ssr/core","version":"0.10.10-alpha.78","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2f04cf32d71c5bf6a7be97414ff2ce0ec1e17b10","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.78","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-m5ldfTjAe8KTYPfEQkTpwYfqOE5brG+m1odmn3wLxkCvNZoS3xDxKBt7gQIR3WhKVzvz1up58jnI5yhc6OJGVw==","shasum":"dc55bba0b82cf43ec59a29efa8f575b165ad1f87","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.78.tgz","fileCount":21,"unpackedSize":45908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTOYCRA9TVsSAnZWagAA3eEP+wbX+UDcqEOCGHqYvyjt\nGP5HPQDywcEb30jtyUt0E2EraLOyQj/3VLTYtOBr05dghSD6z7ErmCRofIfa\n4udGKgwwyf1jdFABAwNnNqAlAFLWs9Vum9FCEedLVWOna588Gk6CUF6P2bJw\nb2wgQ80vmp2p3Cog3fQTvXQUfqKU66Nf3GPS77+MTx6D20xugzoCNTNXOujB\nIUwTKlETNRL/1yvugEuj/Q7+SlRu0OiK2W48a3X5o8/iztVaRq3Or4ePntZm\n+pcIAHb8n2g22fIcXS5anc97bOjbldAvwH+uEIWCe6LvtqIywVJgD7JBGYqN\nGRop5uBitFl4yrjBSj4Fub2VEBx5qEfuNNIMPIpIfJyfB7zCVARNZyYZESsQ\nOU+T7tSXOazB21Y5WmQiCMmD886cc816nB+N+TdgVsPn+kQX3lH7LLzXvpCD\nzREAOPbzjhDQ5mbisB4Z3FI+NdLUPnlA1upTKurxYm1SalD7mBWI1/kKxe1V\nYIuJl3YMliF3Kn3uqeZ/U4V1FxKHxsO9YeFrEHY/yBjj5zdn69OV/xAnrCeQ\ndK2KaZayfPLeWDtBTSRiiLb1IPgV2shGdEy005gbk0dI0MfdfUZk0gi/MnKS\n6H2hfQOVCdSS+VcKnHwB96vQTo3daNN9J/AGm0LW6TSNYuldVi8Lm2L0Gqr4\nluyt\r\n=6CIn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjvVv3qNtxZGcASRYNML6rWs/0a5vqEGHA7Afr34JseAIhAOemvyAN/d042FXCWwBjDTdZR4Oxxds0z4Ku3Ay+PRjI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.78_1573467031761_0.5102025842856637"},"_hasShrinkwrap":false},"0.10.10-alpha.79":{"name":"@react-ssr/core","version":"0.10.10-alpha.79","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"09c4b00f7c6c48ac5efed056096385da080f5b73","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.79","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-F8t/aKr6dhJoqTDoJCnq5wfRR0kzUZJvogq5Z5o/V+qWd2Sl0sj9N8n7Dr6eOzjzrjZpxQqETEolORVFEG7qsg==","shasum":"ecd392dcd087621d5d5a37fb6150532ceae7b2f5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.79.tgz","fileCount":21,"unpackedSize":44975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTQPCRA9TVsSAnZWagAADnYP/0AAMEr/3j7+2tlPKwsu\nqJ4SrA+Y8So7OwdYhgytcut8lss5/fLWxbigk98dFLPJ0idtpx4PC5o9555Q\niAPjN9xG0PloRpKe8vJoyel45vbUW+zgPhpBXiFk6ENyGiybNzBwz2iVWQ2M\nm5BWa11YPyBV8RTheThqBAKcMR6GkBnuaT0APJ7r6G0RUGC8SXMphTc3q7at\nOMotmU1QGluoB+kRGB66I2MQAInRryPR8k34VKA8oBFU8I5x5tAeBjf6xiDc\nh0UGxU0603E8jdeOP6QWLo3t4Za28vnCLYr/qjZyFA1oTpbeliT/islKSVwW\ngf84thunjKBfz5on5PRjiV+1EthK4/5u6EbYouQ5ZEIqWxlXveBnFYIQzrCc\nu/lklBFnGR/S2rZSYpPPhRJiUkHGT8LwJ9TpBpYwnYGSvZSATOeeFpIrGTia\nS9t9teznAkY+oCVXMLA2zo1atQSmblZMjs5ijJa9Wv+oWWKunfSMlkPfJAl3\nTdzt3a+yfFdEsPpKCwnnIQjYn+TodvCw6KttZmAzbCasP7kWnKMN6+HAFlJ0\nKAkJ9kzzqBmNspXkcHP4DzLKCcoeNHCzWDMHnVZIrGhC78OK+p0i4zCIyqvR\n4pQ6GL9oCb5ys0UE2mhspXkYKlDUWqGMUQddSWElBbibya9JusRq9dsflq6n\ntLbN\r\n=Y/wd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRtXzahqhjqo4t+fYGHLRsefwE1tpigaODt70atOz08AIgNBFj6fBp2KWfKIamLpsrdsLyg3wDwTTvn58Bu/sUTQY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.79_1573467150851_0.6177448127519645"},"_hasShrinkwrap":false},"0.10.10-alpha.80":{"name":"@react-ssr/core","version":"0.10.10-alpha.80","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"54311b71826b69998237f5604447906b845c8ff9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.80","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8W1R5EbJ0T8HqXW+UuoZsw6uJbEYBRzcd9w1iw2sYwNbisJxwjpp+c00M7cMwFpi1BcZa6qxnjohT5XBMMEShg==","shasum":"e323c30690887c8244427c9b0db7fa1310bf153c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.80.tgz","fileCount":21,"unpackedSize":43354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTTrCRA9TVsSAnZWagAA2hUP/je1ZYkxpnG6lJz0FDcl\n7oykn9N/A/QIiZ8Lc/hMVVhNOhRY8uFzzJM5p7im/o9D0pJn6Bh6e0aAbaR+\nYoSorera5LbzFZk6ayRxi0DGT7DXdu0oUVzJERU3OajbnmbCAGWDHcd9NIMI\nOV/GeiH/J9zky+LM+y/F9TwcwuKzYwU/1/vuWh0jHkJa17HDPmbmW0nMMnXW\nxClRdDLb3kF2YdJWjMHUGUDfkshk6wC5Gc8QK4dd2twqb4ReCQllbGigi5rJ\nYA8kTA57MsN6mgnerNmzOXyhFQn9keV2Ca3MxK6iYytggrr8BDogIMsVKLQF\nkZtXZySCxaG1KU/bh9rdxbYSGGtNC3ctKF4KmeReKNvM0+KDT2vub+h0anYk\npt34X0DngUNpVTpykOFp2rTs4L8saJTMsXfTZ5Z8NZNZv7QGIMbFdAImLB/L\n31WldgD12cnNYdX5ITyc6Z4OGizevJpahAlkF6wd+XOKqkgu8aKBJ+K8ZkuT\ne9q6XU99+P1sD9u4a2JlzzWJo2SvqvF885zOA+BuQens9CLVS/GmleGOQkeY\nvLrcb348xoDv+DwaOXEGhB7G2YYOBhRb9It8Axp5Z3PUCtYpAgWqRoFN3B2L\nl+79nvhg9nxF4BRQm9MvY7jiFYOOUggN9d4eiaBlHO27eISa1amiq4bh4zBo\n75ZO\r\n=nefz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZfRGheGnfGS+2qMqi6VEG6d+gxz2EdbvV9y1lUMIeagIgQ6Dqy8nLU8Cd2JYqg3C7uLJpTxWRe5lWd66bQ6IHKhc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.80_1573467370702_0.5078902784537966"},"_hasShrinkwrap":false},"0.10.10-alpha.81":{"name":"@react-ssr/core","version":"0.10.10-alpha.81","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f114bcfbab0146813f7b22486d700111fd7594a0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.81","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SiePJ6qglUEoODGcZ3iG5o8IJbCeSK7QsrnUCoKqQ/SXb/3tR2FefMYMxwq7vnF2NkcPiOD5CkKHZpA5YMwU5A==","shasum":"6267e653f5820302b3decb4f4eac162e4139563f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.81.tgz","fileCount":21,"unpackedSize":46230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTZBCRA9TVsSAnZWagAAkbAP/jk+H8Ptcnd7a5eheTLj\n7SquAFN/1mHrEDa+cu283g0XnGcCSjp2QZGFuiZ3r8j9kujHkIsLC4YXUP5W\nalBvL/ZCQbkIJrTUzSmVcmd38QFqQj7d7yEbvt0/Znqn9gZ15ju2Yd/RC3sB\n2i2w9akJh+MDSovh9t3sfPmcNv0+KYb5z8XCjlaBJEfv3jjQfBurvIKj8jho\nIxmYbUHGsg0AJy3lgDa2v1YjbyIYpAWw6V/NAubWE1JOdCT4vkWm2PzkmW/W\nFKuj9uFlLgOMiF1g7rCVtULs5OrZuOxEHTDyuMKNh/IDSxFk6dMyTOBHUKBa\nm7wvOv5yzH5Ij81HGqBcJXtbC013P/LQHJiM78Qne/Iz5s4ahu0Zng4PFA1S\nLLMrmxch50Xly7ueo9ebiyzkM4vp4yr41O7lgEQPgzvdrbwCfk3Rl9MNLHR9\nVT1xoAGfqQf9hOBsbOb+RrfCHnBN7RmtsBigJ2Jz5sPD5Aps02YkioInc6xn\nEtHQ1HxyqfGmpTMP79uNpD8QQcnPPmChgHF3Qp2OCzyOPReVBOTDoKGsEbDO\n+pRFMhWTiOKhK2xhdOqXuzixGz46uDcfyILLd8IsB6CQo9bbRS9AsgxDY9Ph\nEhIwM+KnoUfqsDzymAtIYMiSdV2G6IyAQARR5Dq1OhlAfslgKueX8eCNNDrw\nujfE\r\n=w3/l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQJE40Ot5ZjCE2RnwQ5vrwV8qhfAi9UjEc/ASo4KLsJgIhALpb7p3aJqAYi7E/hd64yyt6MUJbj7q+m2ddS/+DSvUE"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.81_1573467713595_0.17427542689038078"},"_hasShrinkwrap":false},"0.10.10-alpha.82":{"name":"@react-ssr/core","version":"0.10.10-alpha.82","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0755be2eddc81fe877e8107ec97cad01e2d3412f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.82","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RSI11cU1S5NeGLcrzWduiXPbqDhWHJBCAvE5Ad4OM39cYcsDloPlMsEor6jay7jnmLh9c8Ex+Vcg1x7aeSwvXg==","shasum":"008c2b63b88cc92fa7c3f5a5f64cbc69e26d003e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.82.tgz","fileCount":21,"unpackedSize":46258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTczCRA9TVsSAnZWagAAw38P/2J2rz4uYKM8nlnuAHe2\nIyNUbbfMO8jF9nqNAyPyl0r5MT827D5tKRqiUroYmXPIvhZH1e8EcSy36XeI\nB80Fzbw5eYwbO8csaZ3R/K5bXuLpX8RK4u6wA0cHfyMwIA0Ksbkpa8FZaUxM\nisazRR+L0j5P3yj3AvXhNOcePc3vi7yUqyCB0S809maR3SWLpiauxKSx06BF\n38utWVTHn5V4HbHZL8CurQrRJzOBmx4+LKg2pVvB9jcVfx3gCGw3PgvPUf80\nl7mARDyqnwneLbnnvNYanSoiuDCqaFNNmfulaN2xsdOm4bS6pL4Kz+IcmDlH\nnzzCguJ3XPWYQSW0mq9JjQGUX/5qHVIfzURzcoRePc/UYI57ulHLpp0cpxnV\nOkBAKPU74ak3yvCmVluEamKi837SimGLAvvcljd7HQaxZ/1B+QpUopnvF04+\nbRPjRqA232/YzhQTnmhzW4+K8CJGFM3ss8RoZdbAqkO6HGZs1TUfm/D1tLmO\n2fFtYiC7Y5iYsiioMI2um2hYBWl0/xWoF10W4J4LSzeG0ZfiL5dL7BP03kHw\n/VqcQoJmbi2Z4sGNxmLgYXg1w9EGWfempRvcw8XDE3eU4Kr6IfaaBY1HfJnJ\nnmEcjp8zgzhqEEYWfLMxDgDQQ5apKFGeeqOltinz1NYqTuIHXtKFfgVmj9Wl\n5KAV\r\n=gpQR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7AkaYwGy8hVqUlffBXvVX7TzZo2m4rGzyWv823TvHKwIhAJfp/RRdtNHNlPyRzSUmfbeWAzuJRmW3i0pSWhfhG8Vq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.82_1573467955329_0.21003966875847158"},"_hasShrinkwrap":false},"0.10.10-alpha.83":{"name":"@react-ssr/core","version":"0.10.10-alpha.83","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4fd47417d397e1a2e8ab2a587207e3037baecf34","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.83","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-zBnrwbC/8AsyJbf/jSrBlopxgcN2XPmjTkGFWVblLXOKD5DEIc/m3qUmIOjNk2rryTk+V8QyOd2aiia9uV1eog==","shasum":"2737bbf4ce301101dcb50cddf4ec128484ea9b8f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.83.tgz","fileCount":19,"unpackedSize":43923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTf+CRA9TVsSAnZWagAAiCYP/1q52Fwqn88EYWSVf4xq\nRVfns9YY6xDq+ej4vbbfP3pWKMV7P+RqManB42M5xixP32LcdTOMkHd1PU5L\n06waHbs2oeya9bfApvnNTrc6mdaKMBLb64QM11v1AAmB9tWu7rx7zfIfltLp\nJ5kgyC4uCnGK2oX3w7rGvNrFKWE89w6PsDTIwsh6Xemj+dDR1SvGVLq56lqy\nvWME6AIduer3Tf5SAH6MISe2XtYztdZD5Qg+kTU96nqIXJsPhgRRSx3tx3XM\nagSbVJD5x39ZGg7/vh1xHoFxQzds5NkBCG7Z0c9Ly1ox3ilaE5R5bgUXWBkA\nDSsHoh3J2ZepzKFOQnXd/0z6Gsig5GEcTbqz/QaJcqMT0zKtTxMccTHyaStt\nFG6eHUf+0td/MmJDgA3lGEQEMrIsVUkkzr3iQUeTa2J0jqk1cPJQmhh0FgCi\nmu5bZUdgBUP2woZmWOys9UcDpxyPNUQaGYwOohjXKaS/Spro55XxazeOfqur\ntL9+lBN7WwNPFdDX+eooaQBxfAa7pKoswgeClcyaAH5gvC0X99OZmZe0KDZw\nNlrSqeEXvqwOHG4ooPvyxkvgCUkZjWhulNzQIh7UYQ4hnPRh7oeJierOYSXw\nCzY0kCsjT3DiqYAHoWvq9dAKkJVyAkJKcILKNX00Q+m2+IuwI17sgUegH6jL\njHCi\r\n=fmPV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFlJsUSOX3tTdYYi2ovIw8JS6o6/vdZf6KEYCP/AiTH6AiEAhdORblwTHU/0UVnJd7b0vR3JrzayHDtNqeF1nx4CREU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.83_1573468158165_0.08282390485609281"},"_hasShrinkwrap":false},"0.10.10-alpha.84":{"name":"@react-ssr/core","version":"0.10.10-alpha.84","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a6a181ae9997b3afb0d30083ea7dfb06a28359b6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.84","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-2yzSywLTqB8W1aJYrwDhLCJxjRYlZt4DxX8oclEj52dwBwJgldLXuOxFnlPf/7urPfTmjnAgJhDu0ErHUhIRqQ==","shasum":"4e0352266b71e303666b9a215c48e05b974eb1e5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.84.tgz","fileCount":19,"unpackedSize":44549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTk5CRA9TVsSAnZWagAAzKoP/iqAQHIp1fG8Qd9vkoh5\nymHEXJ6op0/PG3xlRIiYkasiWzul34I6naZTmFf4EMCqscOVF4EBrJtT7weR\n9f5xmxszS/DohKdBN1L7wpXim8W40Gny7P+jZpVhURkAmhW/Yp1RSFHRU44x\nCuBjNI3ErzRYIGMEij4Qyqf9sL6SQOApEfWYpHpJqzz2F5eVkdBJDwyjUdc7\nNVWsaCMiXhCsxUr8eSimqMOWqomBv8+vxcdZuCclfeQl8t555VhBB0v6PVcq\nk9ccXhnco7xkRqDLKl4tkPs1dOwrWKsPtGkRoCVNE8yGdl1hCBxZ9YJHKxNq\ns/uRAA53UqxBSjIOrciQVWTTx7OBUUDujnvh2Emz9wCQ7aT2stRfsBL68Qnk\nyeIPvggFZn3Lo8XfzmCYXNrI/l75DYgYTtjDsDmaI12cS18P1e1fn4RkoV4l\n7lQA2BDBxR2Jv4ycUSGp3g2VxD2nxTH/Q9AfCAlh34a5Yrf+N2U/XzOpLpZY\nQLxKt37eSIuDHDo92YtP2NWLAd51aBXXk+70dEYS+/QZ2+w+USLhuM0dmzjj\nWG/oavIuW4ZREzIUFy0v7HHinkf1I6sjh16aDyo0LNOn8dWmqz7r0KXQXIV3\nh7CVmUr34fhhQhA/t8d+jnbjJ5gtrX7Yo2iW3w7N23Fk8tIJMQHFo4v5AGrN\nIxyZ\r\n=bMhE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBiCB4MM1cC/fqinHUH+LXPgIxTALhpZZIHIgLvZlgdwIhAKA54T67BKwRfgE/vn/G1SXCP5z/TZFuCWniMTlyKHTM"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.84_1573468473293_0.6710301099894131"},"_hasShrinkwrap":false},"0.10.10-alpha.85":{"name":"@react-ssr/core","version":"0.10.10-alpha.85","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d5d11daf7022b20816ee014f026d058fcf8401e0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.85","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ifb15Ij40TApIGmYc0TzKtOPcjQvHnu8rf2OtlBlkw6vJkHlx5EOdmgU8elouhGzszkw6uCaNg01IbJrioCvOQ==","shasum":"42ca001f1aecd60e245fc915edcd8d3654697efd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.85.tgz","fileCount":19,"unpackedSize":44548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTmfCRA9TVsSAnZWagAAmD4P/28Adm+bamJP1cPqjTLy\nH+mezfqHJKJJzy1ubM/x3/m/eNeovyFYxf/fdTLr0cBXd8FDL74tH3pxAk/W\nNdqueU71wy91PKaruMnvEkuBpN18Z0MT2rFES+LtKHtL9+ybJd0BvxaAh3fN\n+zlRNMjlzzAoWIMQMTln7+njaFjPokV3Og3Ds6ghQ3orwKctt/VcLqLntj57\nk1qKtl0vMitVd4m046AyWANC2yXWJgBdlfxFk9d76PfoWQ07DrvvIkN4JIaa\nrhCaKUQVTlgNMZHRvNfuH2X0xqkg6f0mZWUTG1viKOUrkSoQfOcuZC7KMfri\nnZ0pXfgwaa+NiiFV8m2xiKX3IAZHV6ZKGxU0MBRxAEp+aQjGCNM5JKFW8IEe\n9nUY0r0Ktg6f9GcL+RL/PSNzXCQ6O/tLYxqNFX6+/bEk+00AUC42A8LJ+m87\nLEVdUR4iHeL57C/PYWRpFfQ7GlCGmJah2/NsfraeSamcsn2ZQ47XHwLxXhmd\nRQcI9eJ0PIjJfQcdIruWRv/70Nytsf5ejBsu8L+bKzUNE1+hlyAa1dE94nw6\n9f1AjHlJ0Hyb9lKbyLy/1JtaLDProAQhgZGpWWIb5U8EUkawhiqjRQCh0/nv\nJuwaDgDbzdELMekGpKtGuZpPknHpcuw150dkKJnrQ+FH0NfOF8WxkVQtJQ8x\nTvWZ\r\n=VxRG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTXcFE0OMryW3NmVIswu7NVEDgzo/Dli571HqrcmAeXAIgLWdJDgX9X095FOSIA5WQhbO/Mon/m4cyFL5Qw1n/SDo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.85_1573468575247_0.7045318196964847"},"_hasShrinkwrap":false},"0.10.10-alpha.86":{"name":"@react-ssr/core","version":"0.10.10-alpha.86","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"22c53c6bcf5ebdcb80fcd325a7869efe88bf9417","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.86","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NEcN03OEPUo3WGYq5DvLTBSHmpKdSPB6F33g28KYkym20bd4MlGgqaL+9Sbdl4CtET0Yk7nrbrf9SrbwUchb7w==","shasum":"6f08a5008528a0263140aa1b583d362fcc05a101","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.86.tgz","fileCount":19,"unpackedSize":44587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTowCRA9TVsSAnZWagAATksP/0SopKLpd6KjyDQ2T92h\nQkNkBijjzr3oV/XSAExegg7+AAMGRcWOvwG6MjuigPya6KOK81qRTMEigj1W\nYnLAcc7tvau2ARv8Hd3pfqviH1mLEuqk9qrFbaz6Fq2JNgEg2Q1oc24CQeDN\noNxEddqhqQuMaO0bd1xconyZrz7IZLaHX67EHyeQtI/XzY4/VVoTzRTFjDFc\nVd8CML/ALMS6VwMJgdp0fl4zBVULmgLxf9DDIQg/lZm6BEQh4pwt3egkbJeq\nTy9GICYN0BJtX/0lMVbs4c2C5Z7IyXG9uowAn/5Wk4wp7PckGY5jji5zQIw7\n3DC4sIiZB81J2i3iWX62WFRYQ/PAz177cFE6V55iGS0molsElYirBLPd0XWJ\nWhFcdrRt7cZF7XJ2rXamEyfFjOm119UNRfAMIWsKupfIvvCMNfPYyxR1iafh\nWmkOyi3Vw8tqiSTMP5wxBsATKJ1zsbf1wmRAQCCyb5Fn6mV3OuxY7/6a7BEp\nSNmZeyL4dZhr/8c5f5h44Xye+KvuuCY8qfsDQDV7AzBRRarUujqUrIdu0BkU\n9GwAe9Qld3/MIBtng2DJyGcue0V7AY5YvHHy7r8eCJ6Ew2vEi9CoXvt8GkZd\n7lLNs8eyYkcGHCdALQTNMq+ev2FJVq6IcT9NqTrfKvVgncOYxP4tFriFUujC\n1+Q1\r\n=awXg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlGJyZIST2Vclqkce/rwKr02cl2KyldiETwUVbAVzzLgIgFzxbH/Ausr4gUOmrYGW2pfe8Dot0fRYu9oTDWoHeTug="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.86_1573468719299_0.2552947965515424"},"_hasShrinkwrap":false},"0.10.10-alpha.87":{"name":"@react-ssr/core","version":"0.10.10-alpha.87","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5df773f74d53bcfc6ae5ce49145c7bffb54fc548","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.87","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9HTiwAHywTgz3XzzZbyaKca5skmS2xLZ81ACq5rNoYDOMEqkuXpOZX9hw2flwBwbkxr9PTlikiz3VXUemadqJw==","shasum":"25997ed154ac598151c6426de221c59c6492f4ed","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.87.tgz","fileCount":19,"unpackedSize":45316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTsVCRA9TVsSAnZWagAAUPAP/0QWkXODyLGu1WGF1DuO\ngb7MvC05pwKO5rg6feD+vidRp8bf5qbx0mI5O8untwv4eiWHWh3mxMm+k2Ci\nlXCELOPEmbJKUX3N1oHfJcHuawo2SXrIztIg6lkGCexov0B/B2z5mKiDcWIc\nXMfx//3p5wGccFn6RFQGIIYRmqds1l3dx/NpZFMjfAma8D2ZEHm1k3uaz5co\nlNHFnzHjwAtgEEpTEHGLjXQKfG+wE2VlbXPbuAMrMkXYucOKNC/uM7UItE/l\nFrXp4Bm4BCZtWDAVIP6ty2zgqBLNU2/6wjc2mRt8wrGEExPPfmMCUv+Yp4MW\nvVW4PkdcA1fJz9zGe1mVejqBW/+vnmLi+DDJApss3xaiMpOlHNfmi7uwyPNK\n5P9c58f42yeXzOECrNG8FIqpp0lYoMF2PXbP/yHTo/wOO5fEa+ulR7w+bhUG\nHyAnyPOEkAA4iUpq63//l54lXu/a9bnNX0Qrq01YhZDsTRzyYKMELYuqSjFv\n/aDQNtnKW26Rfb8U0/3lhVuJiMnEfCyeQmNCGRUaVccp7N9pnIBjENBthG7a\npxr6ZCoLuoscrt1KMFwtGsL4A3WepzV7iH350dcYtGPYD/g2scFHHarkr28n\nCA/un/Xnhd6pswNFR808Gope7fnKAOzHXKl8O0GF93gSEMOVLXoC0RkCM/JX\nAJNK\r\n=UOhY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwC4YYgXu/Ee0kpa++PpTDWhRin3s//ce6ciTwWETQLwIgKgpHP5y1gfblgEzrnSeto6UHIv9F2c3j4Rxb2uri2cU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.87_1573468948293_0.17828771354455197"},"_hasShrinkwrap":false},"0.10.10-alpha.88":{"name":"@react-ssr/core","version":"0.10.10-alpha.88","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9314a590b78dccf92fac44a7da971cad77e5bde6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.88","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-iyvqOli753mDl8iLfPcKQ4B90E92emnBHHDpL1vPpIVZIxTSQYLDJrdrscsScPkJ6qmYpMLToTTtGt0qPhK4bg==","shasum":"63b3fe1fb18e5e5a178b7a1791737d3111cd7a5a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.88.tgz","fileCount":19,"unpackedSize":45282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTu1CRA9TVsSAnZWagAAxpAP/1NuTpXHC781av8Jtzkb\n7gAecMffCtM4ctdN4CvzobFrFF/TtlvQk2KpVhIvPsOi66slg8HH3ybV+WZk\n10yseYBwFfROL5DhxSOOoiHtwFuyqnHN69YbjOLq8wIdh30Oz1h/tW3wnHtw\ngVccLxd+f67v35vZeND8mNZd0HG2H8jt/BV/ENTLqzdulv6k3s7FJNpgRmff\n93k3Qoz4Cl4Srgh/eKeuK2sET4uFiB2xtWR2ODUOnJ1U3nSLKU7KSFhMqQ7/\nUkiy3Ty0O4OmO1P4nLulsBqSbgf1UAYRH3ElAbbq6jKytZxhbBVX8SrnjjEg\nmsyWqO/5UZceW1LUbw7WgbEKUedMB/8EgT+KAFUfR0gmvFttswhM+tCvTnss\nSaraxT3be85L+LvdF/rzm8qdVtaHhXaZK21/a5QimTi9w+O/2zRqlaBDGWIP\nIJr6Qyz3CLrQIhGP8MjOaPNG4atooTNBjiynHv8UqW6ckSD9G1WKK9ADmuWU\n5/NB1egUnO0k9EBOU0zvUspk8Tlh3UBPg3Fw/I4xrDJEicKnZvG23EgbuWH9\nj572jmTfzi1Bj+WIqL/HKxILaGKLh4/TKAQheKAWlu/1rH8cMQkQYJ3kQtAS\nKZlfmPr/xAN1HztCDt1w171hGj7rotp2lsVP6BOW/5HtB0v7MZZUv4FlELUf\n29dq\r\n=ykE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2fWDyIXYiYGswYoExmyyYeAwhHGXkQJgmxv6SWFukSAIgb8iQbm/YVAGKvfNCgtZEg3Eah5uaN61lHRJ3JC8VaAI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.88_1573469106403_0.45601599027251805"},"_hasShrinkwrap":false},"0.10.10-alpha.89":{"name":"@react-ssr/core","version":"0.10.10-alpha.89","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"10f2395b3dd00339d85137d4defe0be9b5ca0b9b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.89","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RuJEH7QwwM0GMQtIoVr1ORhDayR6Ehvb0na1sZX08rAGpTAeqCct7RQXx8EeNqcNC5UERDU1qT/9IlWBUdH9Aw==","shasum":"18aec9ef72e95f0e2cc08a3773b309f2bbbfe40b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.89.tgz","fileCount":19,"unpackedSize":44534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyTzJCRA9TVsSAnZWagAA6DEQAJfGhqSaZzA6FtWxQ5Fa\nk97fqxO5HLuiJfEsWQ0VfeWPzlKsXCTBpe/djS16yBnYTZ3mH/2O8qQ/BMrN\nTAlyAb0nF3hq8nTwJzZQ5W436/B38BtjOAmv0cuheTu5szv5welx70GA3Bqa\nMHjKcmjNPKD4L3ylNaXJ9FnVRVdGUv2l5sRov231huMdDVnDGap3BIeXPFwX\nOTTtcriFlYQ3tBcMca89P/ttjqIYBu0PHFJAmtYdjZavoWhXe6cX0UsudHlq\ntyhWc12yGXB1hY48Zahujy+QETwAmgbXzEwNCHz2R0lUQpGfShAcvWAbzkVU\nDU89MZFmicNBo5l+/Ws4CQFS/rEoBBY43boxnw/s4h7y4uWhMAy73xZPdHuq\nlcBg3qkaJrVG8D4/55DgGAJ8WmGd+znjmoVMt99bwSEMlst5J1lJf9fQIphq\nk1RqD7MWmS078cakgDhsW+gwBsa6AxYno7LKK0QbuwQiVXp4xd2rlbL1OxnM\na29dhdh1PNQb6jCmcAP7rdn3E4OkEST1H00WiO1u5Ley71QNPcyS5MQ6Tqw3\ntdMrd/xTSn9h5CKGCvSjGaKIRpj9R7TQYfHZZW9EMHjmTeOBmv1cCF4WwRLy\n2w7y1E9nnemXQIBkteGcb7D8FzG9V2mwnhVwTap/X41jqwMb1ORVFea9qOL2\nTElA\r\n=58UF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnKRjg2k/ys4m5pSMMzXseBVBVh2a/ekaFcqJ4pbbIkAiEAi8KjLfFy3M5rNc1TCzmAH+ydN8TgXjTZNiALPyV+eOE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.89_1573469382158_0.05391877264413947"},"_hasShrinkwrap":false},"0.10.10-alpha.90":{"name":"@react-ssr/core","version":"0.10.10-alpha.90","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5c8530960d706908831a6f90c8e6b9c9e6921fff","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.90","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jX62H9Un/IJq+IxTEFUx3Uzd1LYkcl0l+aqeCf0xZnIE8+sI1i1S1zDqUlJpPE8jDEz9d0nt59lpBnuCFXAbkA==","shasum":"d27cba2ba8345f4ad48852fd4bec8a5884cba235","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.90.tgz","fileCount":19,"unpackedSize":44541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyT1xCRA9TVsSAnZWagAA/pAP/22vD2KT41p8hegue/hL\nPNVrmRHjYsFjII7kmvFfCNNqWQtLn8U0+Nl5u9KXuOGytGI3RGeJ1ofP8B8Y\na4/oi7qtqTYX9q3Ncc4q6Y/YtXoOWvNpV1GaK2KGIHtANDr8M81/Iq9a+Sr0\nr+PBRl4qsF8buyRnE3O3+cbl4TjxvUs+e7Lg8YSxzpfze8dIHSIeCeHSXvxm\npak1tVxxusKwpkviDsWmJVXdHDw0IDfJ+EObWAyN2Fv1YiRE8paMnYw1TUBr\nIxjqrmifDVKVM3sOlNt7h25SE8Vcw8CWaiAlYIjzIC56Ox/EsusF5NtLzFcU\nRD0GCkycBYSZwQIdLUT5+FoCnolWifWTS1V7TINMJzyZL70KN7Ibxm7Nzuw5\neh3icVeMi3S9YacL08qmdVSnSDEN06V32zVw/4tkdN4mr3w0BL3Ol14vqG2e\ngwq+khJic+61s10jQZzhF5F6MALU5ZY/St4gYbA6CFORPWFWvli+1chjepAJ\nbSh6DdAb0yIf5mh56lUY5onRpAPqTH07H2smRvDRrIVkFjGPy3yw9bFlRfaU\nnN6FFcV3rQpJ+0ToTi7cgKVYXaU62mQMWaA6arLMh0pVpoKF390URBrA17pl\nQemHX6EVv9Z8ChXeXjmhS7CdV3T5dEtM/4mmJ2UQUmZpsKUiXYA3POkcqBsC\n/fRP\r\n=5YL3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLc7rVx7HGGCt/moSsExMcpJ2em5QBYGJ6DYNc3hfAfgIgMB3KEc3MuzZGBRFw0IzgsTp7H4tecdk7N2nwUGTqV0g="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.90_1573469550732_0.24800092052689893"},"_hasShrinkwrap":false},"0.10.10-alpha.91":{"name":"@react-ssr/core","version":"0.10.10-alpha.91","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"12cf89f783d94b05f4cd44b6c681299bead55478","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.91","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+2zXQQcYWwLWy+mav9iWvD9YrPxJtaUvsn0xrakD8UQdgpTTKogBtwPqCZJJ9SA5j9oCWpDA+HxQOoTdSGu2KA==","shasum":"000a0258c900fcbea76a513814acd3b50b6d7085","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.91.tgz","fileCount":19,"unpackedSize":44567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyT3tCRA9TVsSAnZWagAASH4P/301CvivZlMX6+Bs81sI\nhWwRRnARjA2NfPpEXcot9Rwzqh1jb7Y3qFFvEbBnRdybdPytOD/rEsJ3Im5w\ni++EXaBdXCOuOx5hnU5Fa5HSHIiPmMnZG68pEIhZW3VQN07RcjD0IcwEx67j\nLEUm1eVpO6WFonfHZ+4WvkA/hsYT5WuydCu3OeCn2tXZZTqjTrkqqN/RlDZP\ntBsSuPvePWHMOM26+u9Q8FyLgEom/aPBnu5C2H2C6Knu+vYMbqLbK2tLnXAy\n9D+MRQ2jaye4EDAwpwBIKMvCPtUQZuoeleaA+zkdbkKCqhI1NlEe0kY9vI9a\nR+I3mh7adw7Znxs1o/cA2i9IGGwPZs6LgNBwudHbovOXnWjX9t+8sjB7F5Qu\nUboCUNbImb2KW1of72i9H7v+eiKk0Dfz9akaKu0ghjmJj27/WqgSd+YuOZkT\nlmjcjl2L3qCApDZx2V7+wd+L1Fej84cib2VQxzs/GaVpcTI4GUxi5uv42ssT\n1BMfHFPWlYr5GyifCfRaktgcODD26Chztx2P9YD7oBie+QkbLmAa++tCKLMG\nDXli1zBE4aN046hYC/6TRmipVfwkLUFJ2jHMGeqExGe+Stbi5mjfaFJzgU6k\nlL6coXAx5uY71MZpA8U6AoLRIH0PwR44IPS1+X84WXNfF2r6RYeoDhDYhQmI\nurpb\r\n=ufGi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKDt3VPJhC8xAxLCfO7wj7D9xQbXTUTDt2el2v4mn+6wIgDJkW3wmfaBKnv3IG0r+6pP1kYdCz6AKyh8/CSKN4jQo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.91_1573469674024_0.16218559512354536"},"_hasShrinkwrap":false},"0.10.10-alpha.92":{"name":"@react-ssr/core","version":"0.10.10-alpha.92","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"934a675fa197379fee8058b9fd1d7a1c89b1d976","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.92","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lo11evUD9HNSFtSzO01jdX12FZuYpWg71MkVPljNrhlUQNkwz0N9ZyX35pWM16ILgB2O94TZjaBnfRqXrLl1Ug==","shasum":"b25e0b30a722a59d6425ba57399892a0ead36874","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.92.tgz","fileCount":19,"unpackedSize":44560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyT6jCRA9TVsSAnZWagAAnmgP/0NbgygcApl9p8bdYlqX\nMMle9Yh9UkgH9uacW8Z3EabEpjNwIA/h3xkwf7CjNtVGuSxbtTQq41S5d5rt\naBG57MpujJzmglVBEFn8nFryAlxmziQ37QMNK07eV28HVnwfBdY8hEE4A3XN\nD3S36GUlT12Mmi0wMjaDR/WvRYPO4oAei0o4AG8qiOf5EMdZj9wA61p0atmP\nPSorglVZixKopbNFpIRtCwnxQxMebQ+SQ79lzVjXxXoi+xq36f60x5H7PGvN\nZtoT3gttouBh4+NB9ct1x/6ZcbzFAUWEsGOx1I30iqkmK+zW3lSKFc2tmsvM\nuPlNRCGgDiy2omMuFz+TxAYSI5Vzz4bqgJ+RGWUE/2si04/LUrOBaQazxbDt\nXzV2qpzaf9LHJdIXcNTODGpsB2YtBXIRwpf+LiVemJ4sLKIXZ8BxrJti3WF6\niOCHI30IxMNb0++jk90PyJHpYpES7EbSaMuc7o2Yi0g19GWT4oRgbecLPyzz\nMdUx6kTPO6Y9NS/l0QxGUyHIKaqOy9WgB9OBO1rR1jtU/990u2Nkye/4hT0j\nyb4s7C568u2i/P7gNfkeZAg/k7xAI3IY2lh8Sg8ccvABABoNbw8dhQN0fuRs\nVdHlVcFz9XcIHbq5NJ324FccK0e4KbxUnY4m9qjBM7RkGKKokLhEocEH5sbH\nnBam\r\n=ugvW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHN1RGlVOTzvYhg295giYnQgn66fGOUGi9RE593xM2DCAiBEiVwz2euG5lMdW0Ung8z9QO6mtqIjEmOKUXgE+L+M1Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.92_1573469856775_0.47363598768677173"},"_hasShrinkwrap":false},"0.10.10-alpha.93":{"name":"@react-ssr/core","version":"0.10.10-alpha.93","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ecd797931804eb4ea4808ed9c61df444744f323e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.93","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/kG5wevEeBGsfg5iEKa/ol+XRaOdxl51Bwjwc0xMbcQo/CPf/7Xwc6/5ZMC15DBRb62IafB7QRIcZTZW6yT/tA==","shasum":"de137ec7f534907e528c2e06191093e9233cc6ee","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.93.tgz","fileCount":19,"unpackedSize":44556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyT8JCRA9TVsSAnZWagAAvH8P/1bqk3MKUuZB9iU7nKxB\nP9Vyq0YjTkd42a9VgaEW/Imbm7XuJaqlzkLxyUqZdGCk8lp4Zp7eaeU0Qe+y\nEgGDaHpBtQJwFiq/RjgNPGLIBrYy6R8S0QBUQqcNplIXshM5TcxevgKZtxTY\nWlWdpl0hFUgT4VI9aqHWekqr7sv8zT93WPmBbrnKQFuFCLFzC3mV1n6Ymq5v\nHhM349LfkMl0P3jQ0MaEWgAM9RP9DxqzfjKK+3pjIIUkfPOloFhgJFpEeMB9\ntEMabh5FF/sHEb7vlgalGYdBgAwZDW6Vlw7JlvjBv0TjlZPQJjRd5bL6Pf2G\nfOHJivX5bOseDz7kFsCo1T5HyvH73faZJToAdkX91pwTUKgm2P2yqKeXThvP\ndk7LqmuXtraplddlogVf56yQgpsIZDhsq7sKtaJMDaw7I3ufgpuvwDCr7pIZ\nk5SIDMENGoX8zbU/gH817PlBn+iM6wovoi0+cWZV1VK2bV//mF7w6GL6IroQ\nmC6YGTLjCXhCpQesomZ5qn3xSUHOZ1NT8Ms1uJcFkj4WxPbpYJ/GbiHDVO+z\n2i1F8rmLBQtfR5BCxPpdyNMjUgfPFrRbaKVgmHQl/Rhbbqe/69z3Tso2bg2a\nZAfokhwMsK9dsxHNBlY6rAAdhY9yUOm2qjnza2C0YOW4eUvpMQ+z22h6hYWA\n76e6\r\n=l4VZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwtzsKgKA5G2XvZjqt6dREQtz0hnmzjCzkxx9hEEVDdAIhAItVegZr5y8yzYXwC9mBvYuMZraJJC+WJYoBMV1IyRBv"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.93_1573469958559_0.035968646217016564"},"_hasShrinkwrap":false},"0.10.10-alpha.94":{"name":"@react-ssr/core","version":"0.10.10-alpha.94","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5a2f5af8438cff2d749362e77fce055116b30423","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.94","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qqWQ456yPTpTdmcLrjpziUkAZFPGl58rbfL0M6wzbvrUHfP6Bkizud7R5zqsrRyaaDkBVy8uApfl1mdUONpZRg==","shasum":"6f012a3f577aa5dc94732862871e0314e932a31b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.94.tgz","fileCount":19,"unpackedSize":44541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyT/1CRA9TVsSAnZWagAAaQ8P/RoawbDy4Vn4eWOEUH4D\nYCkFPTKy1UsbdM6CyzUOgq/AcKTv4O7EknX+Au0GKy2ZkqoIrzYhHx0Zo0mu\np7ULPmYnjz0VmaYmsPCstBD0W/mLalEYCEgJH2vynFtNa3ORaERBwCF8WeiJ\nIVY0JzzO7u587haSXQTgD+QJtG3WipINonMsnpF19pvGXzP/Cb6dhf28SkOd\n/wYnT9X28/ed7kTOhNOYgdvWYXPSy2bUwPupdOkRtD2/5QEdojKuOgV7wNDv\nmUbERrI5c5xMva76by3y19cS2rvmPeIAGhnetRj+XhqPROU0RTuaB/gwMfVz\nSba47hd/Dnscd4oyJvxwCwgWKVWhRpN/tXKUrAn/jr+jyEGgKGg5SCspI6Q/\ns3CP4TG0GCH8xpNhrQ/+MIaWRyUYcv1qqKob3RHrEWq2LryUhcOnrl/a4fZu\n1u9mUyjHHRlw4oN7iu0f6dA5P1FJIttmbhld/sjK5AmNEN1OrG9YITLmP7Ut\nGe+WKS8dCrqgsR2l6/a0JeoNRM3fw+3ep7qD2O4eAqPQmi9bRjCFelI6Tos4\nO1qzH+AM3Cf41knnjVpYF/NcHtsEMeF/AungPGUBxWD3/kbvyzLNC4nr9dOP\nIvMQoE8Q7i2fBIkgYm+Deq+KJrtcIE8BiEcGGDhIVtCX4tkYSz7Q+iOW9T9l\ncLyz\r\n=fV62\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFXuE4BC+cVKT6ZIpfsp2zUPj6mEm5XNN/52mVkK0OJgAiAI6ie4M/Ig4BztO0TG5wuL4fojoFWjFWwhtxoRin/5YQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.94_1573470194009_0.3452049363522083"},"_hasShrinkwrap":false},"0.10.10-alpha.95":{"name":"@react-ssr/core","version":"0.10.10-alpha.95","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"283202103de97ed78cb8d959802c30ccd4615353","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.95","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RVZg9ckivz02PApHXbCRwctLiXVQ93ElH7BQnySmjypFqp6Kk8X3tZHQE4DCngxeyQVILrWfY07MMWkVypqmCg==","shasum":"5ccb7b18d1873fbb7efaac688b8113a8a0eccf57","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.95.tgz","fileCount":19,"unpackedSize":44712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUECCRA9TVsSAnZWagAAD7cP/0C89TXCxSUPjHLG2CcX\n4QyGPL6hNFtkzFCawbKAIgRDkQHQVKLNE3iQj7ZQGekGj1tLet02KoX0t+aZ\ngHoNT6C0G7XDCXuwEog2VY6o+LGaYDAT/0gIZo4VjPl+OugSt8T36HMDLWHL\nxzHfaTZh6FyF/DxzQ8mULD+PRRKB4hXKu3IcX6P7frj41OmeU29mqeir4V5J\n+QrTTH0OyAhPjBYtxOo6Vt/swKfTL3pHvi6NNcS4mO/F0INz8kgj+Sh978Bv\nkk1NDjavsWIMNJjeyMnaL/TZBmbTWu3uA1XhppH6wZD9czXeBowfnjOrfTmz\n0d3I8UWv/3Ukv8PlOIDMmVgIl/IOSp5BFBL1XkMbf/qJkdCbQGojT+71JB5O\nt8+h9TDAa9FvPHJMQQKa36+ZZMtA8HHjUSTCpXCD4750bpA3KRMz0DqFgbQe\nWkb79nII+8fvWkWBcCRCwianGG+B+Mvmhc5qjIJi4JyjhwRqrMNb2GHQVjlf\nDQJsHO6fTte/f51b4u7evlOUChdSufUyqVQYpUi3MNSBHvNjigYyQgLcMY8K\nMr9UaN7WQNfr5dI/ezGF3KrW48Ji/TxKlZMsNz+/BVc1q2RVz2cuii5qZNj8\nUtQaV0AJbp3+HQS+tQwDjX0+P3ZI9Myzzgvm06DDXK4MpzcxzAFDQbpl/Yqa\nTY9F\r\n=JKGe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDkeCv+3MoEvDcFk+0vZEL+CaF2sOI8L0hZt6AyjzaFAiEA+S0mIQ2/zoxZBaSu9sL06/B3FN1qET0cIGh1NYTfXCw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.95_1573470463449_0.6185123657596856"},"_hasShrinkwrap":false},"0.10.10-alpha.96":{"name":"@react-ssr/core","version":"0.10.10-alpha.96","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7b8c1952360df638e4a9a425d3adad24f324b91f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.96","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-1ZH48SDpneVWfNYLWB7l++XeSR+FjOr3SILX4cxlCrzFNARu1fLF6x3591x9jtATgsPHuiSmzXzLGvrOcN4nWg==","shasum":"344adcfac7ab21a595f3c950b8b9c20b543739d8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.96.tgz","fileCount":19,"unpackedSize":44142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyULzCRA9TVsSAnZWagAAyBcP/ibnphvVx77Vl/gaCwnS\nPO1V3NqfSwesST88xNTIZDX02qlpVbk/q8VRuh0IPCEdjAG64qiILIyHro4Z\nJWz/KgFBlHSKgnX3HclSI8ctdSWOWQHnQbf12QtyONpmdpBHfVK0enYXNJVJ\no4drCyVEqGQ8Oo1tbanPawETqT+rg5iFVcXK/P4C2ZUmR2aaD9uCJ9lxt40U\nvtVXf6J7kS9w2HSA+iKPYsDV0BDF4Rj5MhIt4vxLq/u/3jPKP5oF+TkpjrXf\nYqmujhOanz9vGW3qaOJtUqpa9+BfrnU/56swaSTnvH4PEhatD6TkDC2zPMUr\nfXa/gUGOKwZA1Sc68janbxcxGkh9qixNOSaZRAJZoRzHzAKjn2kJiIDiHw+1\nVDIcksT8GQz+fmWdLbMj2VgGoEGtEKl8SPJa9co58WH4+chBnJiZBqIDXCnW\n/HKE2KNfon7x1LOO2YpQSbSE/2Vq64m86RfO8Oh54oOuA9zSa2fryag5jv0H\nWlwxFKfoJ/FEt4Tqt+QGAp7livr0+G/r8kYt5UXRgH5ppVdBkD8G9G3wp9uw\n1d0yGSSzTuXlFzx1iE4hCbJKyHZIcKSycPhY7+G2qOvcVbYQpa4v3njXYyaB\nuxP+FfmPDuBUvLVePSgJOmoX2Gfc/yL+TuyFZ34KKDPZ6GpQwbXWhLES1xNE\ncOgn\r\n=4Xeo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIsVpO6BCxlZuggBwm3/B6Gz2KGpeMcAkp/sksa0Ey8AIhANcMQSPJ29yOd5z051llpfoxMfQniRusPKjRikTM7xRH"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.96_1573470963491_0.2709811948779939"},"_hasShrinkwrap":false},"0.10.10-alpha.97":{"name":"@react-ssr/core","version":"0.10.10-alpha.97","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a2c4b9df8c9b50f30c578e216ca46f6be3a98c54","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.97","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-f+TvOngJI5OaB6KJJADR4gVqAhNGIfCgIgshhzjs9DS7NmFfJbjzPh91FlQU5+wg1GkQkU2V7ACjc74P6hTmXw==","shasum":"46506717f619c7e123d75a364ec57ba128eacb05","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.97.tgz","fileCount":19,"unpackedSize":43638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUaWCRA9TVsSAnZWagAA37YP/R/wBLs8yKc60M/GJNWN\n6EEJdXTAH4vHAup4fMRBSvAHjcts15p0mB94eKXzM1aXW5W5/lhd32Qzmii4\nVyDOC048p9T3HJkW9UrPldIM9YJdp5q/0cknF6dY83uJi868pnGS+AagMf1J\nsFb94H1F7NxILJGrFK8sFZ5i0AcE0ifli4fzT2I0/fSL/mKXPTNI4S6cPMwj\n1/J5gphuylfoC9lUWp5lzrNp7PqT3LiyHyq6fU8y25ZLBCJJmlo9CbeSpxq4\n01NTjZUVVvnHgIV4VJGRgLce6e8QtTQMz3CGFjj1IzUBhIMbMnmFV06Q8ee4\nw37t4L9V/fIMCYz6pOpIbQHHe191xi/c+BdCOdFzogF5A00b8f3F95XqMIrV\nUPu7VB/FqNxpPp0mNUe55BPLGV3dDg3rPJkBTIwCKSEY3EQ5pGT2sdD04/0C\n50RD0gbZUriVstV8YK9/01Rvh84YFbAtg8rer0TerbKH0CHPl5zcLqqXxCKO\nTrS7IYsrotQobUWTKAMViOLDnwff7DHD91RnWjzT6b3AwiJB85OdNxOYWRPx\nXeKt8NF2Rgip0TQ9JAZxkl/DusxQxJOlyXHjaw0fr2ytZ7LpYinjrRXRD/de\n2Gy8qyar2INXanEspSn0uYXNjPtpxTtpvSVmvfbFAitVpn1qx76YUlsQdb8Q\nhd6E\r\n=aQ+5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVrP7XBQgEXvvc7+YAA4VJvzJqbWlY4+kRYqjatjTU4wIgZcfb1zbOz2l6AVQuzKlwE8uBQWjhpQA3FEibdXd8clE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.97_1573471893681_0.6834043322660435"},"_hasShrinkwrap":false},"0.10.10-alpha.98":{"name":"@react-ssr/core","version":"0.10.10-alpha.98","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6985a1511ed3e2e9294b7c93af8fbd8b82f633e2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.98","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hhxIJRScmVby8c+u3I2wLpRmQd21NOjLPtvA0uGnj1eHbVzus2+JuTxj94jQTn/d2b/OwBlNHNjiS+cn1/S21Q==","shasum":"d5635eb0bf8487f671e15b728823b6c97338c5e7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.98.tgz","fileCount":19,"unpackedSize":43639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUevCRA9TVsSAnZWagAAAOgP/Rrjg6VSI97VwVuSneIM\nv99WpzoVqxkZF2J54VzWvLJzCdcZw/TbudZcYi0enFNzHnIOeHiIrFyTgI8N\nTfCAjl25z4vrU7Eh5fd6ne2h095A/SpSDUJhjvrPC4eNMXH5H2iAK81HTsyw\nvyT0a/mXfAM7NLe0ZIIPvrh+boG6HzWnsqPU2vEitfcerHvSmpc1FonyKYEH\nH1FUGIbfh5GyW0K4LCVTYJPnpuQ/mA8xWsKbeHxz6Q83L2F8jGeN0JkOayZC\nw4grILcbCX+rTqTvf1OUspy3+3VVCb6CWSntwnRrEu3QGlsJQpg3iRl/CGcH\nLDTogj8uUHmzjX0oM9puJlGVoqioTO41n3XSUoMafxAalIU05hcoRQ/PimIy\nr4w67qV6mCj/Gy/EKTxns70dF23noyfW/XUKtq+/N4c8jlFKH3W1tDM1+z14\n6NvkDxofx3rzk8QpDVC+uPrCDIxI9OOKt+sXkOL8DbOj7smxFDcGbXZOtaPr\nY1h0ot41KrfacTTEpPy5uHps/iWSj8KnE0hbYiVJ5HM07oSkuLcPVMQ+Db4j\nqGPfJC1CADg9IdTIXKAO21SpxX1luMQOThU3cX8tP8FwtkDyfld1Z2w8Cvfa\ncSbrC+714zdnqSxrnP7pxp4nEfAlCSAM9qiRCkjlV6FO4ELp/2AWlFrw1nnr\nqEYk\r\n=SbhY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFv8X5JtyTlNB5D+ioOVQ3eHeAFnqk5SoI4ZQIJvlOXmAiEAjdkRuYyVO+uPyVkQWME+yPUr/6mzVdPu4IUFecOxStU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.98_1573472175396_0.3970190579365378"},"_hasShrinkwrap":false},"0.10.10-alpha.99":{"name":"@react-ssr/core","version":"0.10.10-alpha.99","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"99bf0adacc0d09b6a9ba01a33a4f632b657edcf0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.99","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pS7IS5QwiBsjW710ms1uZjkfnQ81ytntMY/Xo/x0hIuxo5IrimDmnaInjh9JQfdgZmHYrmO0/YaYaVHkjY3H8A==","shasum":"e060afce93031aea12b53de3856347cc7ad04b74","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.99.tgz","fileCount":19,"unpackedSize":43654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUjSCRA9TVsSAnZWagAAI8IP/1pCpWa9cyRPC5Hp1sa/\nOgW+srBPaSEdiHg15i8jMQ+Vl/YPPiYp7mTxR8vF5pLlW1Mp5r4rzO7bpZ2I\nZIwLJGVwc6zmp/tmtexIEEt4HJBnhNbsM7wIIRQpukHx8G26m4emvF2aCe/V\nN1yhsWAXo3yQJPQLsD+UhnE661d9gFuACHRxEFhUKdBf12eeEdzuoA637vBt\nSIF47jJv4VJpSCTWZk9zYLLnhPMxZU4GDP3EH3opC5mgrGMCY0QT+/N4UMTY\nJLBd29YlbBVm/PFlAoawKowPNTOCItoz2SJYNSkZQ98E51l1MW4uAGYhBC5A\nYgJdOy/4DeYeGcP+lvWQMTFh313dtTulN3G5LtmZFIXFHqeNM3SIHYP8u9iG\n28BneyHkwGn8P1BIFmlhVttEMSg57FFq/ZadRyt2rIEjAuPvM/LQ7lGUrYIx\n+UcvzoUkhe1S2GkC7cAHZyCJpHUNciHbSmXXNzgwbVP6DqKCqj8rf1rfQ6Yk\nyLZwRsQOdV5BaXNjq4jsRKUql1p31QJE/t3xHyVmAFF76z+O9eZ/d1E0fr2M\nOPPEryZlqW5wBzJU7gvXA+EjA7AzcgYkou6i/Nhuhr+l/mToceVM0o3NBeAz\n4hQyI4eRmRBzmdQHtAC7piqd6DUrnpqQDD5ZOEAmlglMXTOnlDQjdY1p9z34\n3zCV\r\n=rplx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDZQuj5MzhTOYVQQ1cGKdABoN+Q7veUhUFsW5Bdu7PNQAiEAvjv8pKNtTouF38c6DO254OECHM4f6mQDXUk/YVNuNmo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.99_1573472466041_0.9377731600056141"},"_hasShrinkwrap":false},"0.10.10-alpha.100":{"name":"@react-ssr/core","version":"0.10.10-alpha.100","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"110369347353a39305d1d065b02cca9ecedfcb9a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.100","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YcOJpK5TgKFrzEDk5D/1gGyguwSW8THip9x/PQLsG0w7+StaTVrfq4m3GiJCEv6hhU5SXhX3EZEi/LqoLaCPKg==","shasum":"37accaf18f12a0815e5e0a79e585d9480abf2609","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.100.tgz","fileCount":19,"unpackedSize":43671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUmBCRA9TVsSAnZWagAAHb0P/3PBKEmF/AJ+eb9GnSW8\nSMrc6zHmAbC6Imqgk3dzVhhWIzphGpPQexWm9AOiU4W3KJnp2b84J8veQcWm\nRm43zRsU/Y4l9IBmC8ul+tcWAmNcdvctWhvGdpnHu0btpwDyz1gJDsC0k2+n\ngh5QnqsH1SSIavmGOAKTyLJFhgjkcVWg6acJrxlw5gqRsxPaVjxl2kyiQcZt\n6UwU/JlvmpfGLHOcFKXzBXVsVjC5IDswYAGOGyGnEkB3T6S368hVqK1FLTCB\nRCjjrNLFbuNTo1ZsShgl23u6Fr1QTnWNKv69CuVGAz604iGZ56Di/Xbk4MoQ\n71DRoj5BXisoz7BgCCFB1jdLxKrHhswiVvLighsYtwtBtvy9M26+oloDehgz\nq/dg4zrz4akzxWxDl4DU15bzy1iKdwjD2zuNdnMLHZWoRqUUo+TGjrR9mcjQ\ntoZcSJsE9Jw2NieSyAbJPN9VisBgzkSPZaiJDsbKxYy1wKfcBaI1sxwhZhCh\nguIehnsgKdUx093ZNm0lVk1uwprztx7QnqKgabGudjllMFUveHwfat2u+tiK\nmlQqn8ReTF58Ih0/5VZ+lo0bHDC298XHXS4yEwcXLdbI7we2S9nYZx1fVf6T\nE39bfI3B/pBNTtNzzJZ21QaPnbWoPbCpRL3G0sDDW8hbvgiKfh5oAYRD9Pbc\nc/Bi\r\n=B78M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLHKHxMcEPfuwSR0vmZe+eZmPDtGndPU+nHvG6chVm+AiEA9cN91YbOkHE9UqQC0N8c47sqsiISd5SemupRRjr0Dag="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.100_1573472641021_0.47385618724535705"},"_hasShrinkwrap":false},"0.10.10-alpha.101":{"name":"@react-ssr/core","version":"0.10.10-alpha.101","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1cf83db9fed0dc55cec31ba6a8f18232549ed0c8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.101","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-yqs0afDfdMJ2BdByOZ2SsNMl6tE05/cU+H9wRyL0XEX641z8L+uxyHEPeGshy8ks2xJZcpaugZugzGKnODtQ8g==","shasum":"ed2798fbf9b86fd374b4dbee7858d68e18d2b333","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.101.tgz","fileCount":19,"unpackedSize":44139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUqGCRA9TVsSAnZWagAAKu8QAIGMZEd6TFL9vvIUi2zP\nqjGRKeRmsCB9snM3qhnCMjUhhmRZRqtc2HprcG8Wl7U/I2K4SsvAaWrarOn9\nAKJR8xoU7FrgzO3HokzA01GwLiPX9u9UFZL2uIDEZnuXPOzxD4llKaMIO/R5\niRdQkrzpaKTE75AEy2X9nvuqT/BrsWMfbx+6blQfF8iCoKGf7kZ1TJxgZie4\n8RKvARtyXf0a53xz27mNp5/s50ukBQdzsE8+hTm7Ho8BU4B2AaX7CE4DSpV0\noH3tih87JU82QErjDwrjLWE70RNKRmwq8t0CSciTW20QLBPyfVFDFOlkcUJa\nCz6BA+q+yM32Qh413Q4CDBmDVBnnupPXNLtxVNDev+nI1C4OZ1/oLie6Kp7i\nFdmGC5+70frwdJ81qVg+cUQ54UsJkOPHBRfrWjwO7CvVzSQ56QFM1qb4T7h6\nL6RAd/wJoVkFSqkMCGt0klQJhUtZMCeiHs3t6pJAOW7JST0nNj9m1AIX6gE9\nAoz8cxwLNGrOK8i+2CDCwTucVAy7uWuvaeVtVVRbfzk+XaaG8vWCXKO6rD+B\no3hE8zq2wlBGpf4k1CcGKBhUGMnFaIG4/FiHBoSgJMAe4x4I2ORu/VSPVzC1\nIVWagWwvoRbipbvvsFfGeWG4qikx0SZKSXkt5FJCpGGrUehECG6pWbFOii3v\nfD1W\r\n=IRkh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb/KT5ULFE/0hD3UbEpClGFoRMvOlu63LoZ2//O8+XNAIhAMZp5pVc2y15jWLlpOG7tbz+VLxLsn59Lse9zntf8ieb"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.101_1573472901858_0.7429450969080791"},"_hasShrinkwrap":false},"0.10.10-alpha.102":{"name":"@react-ssr/core","version":"0.10.10-alpha.102","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6199dd7459cb6b5e3adaebde8517db192b4965cc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.102","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ujEKJVr7xax9GfHQi093wKLS7PZHHyMlk8J1Yv5XR43e52k0adOz9JURMafoEHsTblJxb0wY4/eKn1wv68gDcg==","shasum":"919dc82762f73b1e88a4a625e226b50d69258aaf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.102.tgz","fileCount":19,"unpackedSize":44202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUrxCRA9TVsSAnZWagAAqWMQAJAYrRDA0uIocKUSSfUi\nd1OM6L5cCH/u9aHZk0eoET7XKzGRG0psBLK9YOtFXBDjagdVCtT+xq7x8leJ\nXR+u9TQHmAGRq1+5apHZ366D6fABEbn5GPOKvQT/dH53W9+6pUGkiVBpVOTt\nHGSkOx0jNDzGMmmhejwRosBwn0BnVStDqX7kL916nBQ7YGuLRcgECneh/Xtm\nPia5Vb1bkriAI6pcW/e9MoUcwQqI4xolegvkCDeFyzBoDo5/WfzgjxHDld+m\nlKRoaB+y/+sdkNDjp+HKxIMH4mvD5bbwVGVcQLoGoG58JHqc4/148xKXVvaD\nZy9X3BNGQg1mZmXqa8cZLAuaIpW0o6Bz2W0PgaWapUEHtHWhkNfueiZOxKr1\nR6MYVESyEvlK+EK0MaQoLghmOkfzARom42SrR+HUWqjttrIxPbsUlAz3/9E1\n39fkSpmvwoulJdrf+NRqjP9bNuDyuLXAqWsdWPFoDHsGOvHeq397vEnwt6KW\nGxJVdZMKYIYVikUq0iiY/m3LYocmH6VPX/0AEa4iQ9mbJakzg8QFQmxDT4Cd\nZqONM7gxQWVhnjP+WzZcOvc5aAQKcOVxT1sxSuGWyXuroB01hcDVXTAq3pY9\n2iF8WJYOLY/1ntf2zMHjZgpFnG+g8C5eVZDJoVjbaEBzYkRe1/BD5SSpqDCH\nU+Kf\r\n=2GK9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFS54YWYyY7uRJUSbhQx/abAwWxeoRI7MdTR+0tvsS6FAiADTwaKCowmreoWG489yil6hF2dYjWdqN+iaIJRmvg8uA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.102_1573473009148_0.23621620264859255"},"_hasShrinkwrap":false},"0.10.10-alpha.103":{"name":"@react-ssr/core","version":"0.10.10-alpha.103","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5a6438048660a83e81d344a576cb9c3a6b69106e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.103","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-m2ixg+i+g/81QPLszutncWq3ynZflujDsIuYOkdjUmz2bjN3DVYXhxrNLqO0fKhGKTVAgHD54u9yovrWDcJqSw==","shasum":"96deddd431cde38af7085f3fd9a84246e3eeeaa0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.103.tgz","fileCount":19,"unpackedSize":44286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUvuCRA9TVsSAnZWagAAnBcP/0OWQfICgsmPqDLESXm6\nyKYdejBj5bNkM0j1aXelxQ5ksn3M0ty6j7Ye6KNlX9ax/EeBlUo/P175CSuM\nnKZmyja1eLeTGHvRevEbCr8g3m2t7Noy0A8qQVPFiVWqrZISPfcGA5CNoj01\nCtBF97eSRme8sE4JYtDYPRDeJphGcrMu5rcA7JnD7Ut7gT7qb2MYwC+6dOBU\nVhuGwsnlD9xGCnDzkm9YT++gbtRuNNoRhBa2ZuhOlHPc5qb0sEl9dV5cm5+F\n3iLdKJQLYEqbwRlVUao5tSbvzPExQ2WZc3sDjs+id301epoA8znIhW1jKxTt\ni+SrJIETp1rcsG7vzBWsAm2qbG8UczikmwKKgePIXdE2AKn+dAziAf78k+Xp\n+PzRuVV0y5OP/cidpsLDtcgx0Qgz0wVTzjIKNAf2o43l5J0S9b3fsqtREJev\nl/c2jqHF90/U2JCUTtpdTtmmXh9oYQdmt26ZQZkljQiGfCBJa5xA/ROODRV0\nfm3YUcPfQGv73RkSO8QzAP8ggtVPEJqIJyc4nPqcMP/nKU7mZ70Jj0cAsUbs\nWcZtSgfds+uMzq3CoqCJh5eVMzfgNJnSfJYKEAMW2pfzPh3knrgf19plqT2L\nftuXwFYrXjbaZWAcOXxy/TApJdpubCobO7moqW05EUOLXfHCtjqQcCwj/Bqi\nPyfb\r\n=Iwtf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBInlrVCGrZFhkvLcDNTkwi30p8yjgBugy/86UvKyTCiAiEAvlTS52cYwgQ11DZVhRmlrfrqzV935mcKhi1PkOnShMg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.103_1573473262291_0.8144826259530753"},"_hasShrinkwrap":false},"0.10.10-alpha.104":{"name":"@react-ssr/core","version":"0.10.10-alpha.104","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"11893b5ffe510fc9513751d19a570d188ba5153a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.104","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Y8QzyUY4IEm4cGlPfWwiVxhS7Wnp4EvB09865vtYvZzK5IQYLosrkNUyz7yJckgGfCX6/5c/oZmIq/K70+lEMw==","shasum":"556e1368601daf15b8a970c740035d7eea0f7dea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.104.tgz","fileCount":19,"unpackedSize":44178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyUzJCRA9TVsSAnZWagAAmvAP/2YaPM8rSQejES/3e+kA\nmMvcWVnsdrXxwsiLfgelp6p0fm+XMQ7nnA7NVEhT4kabJ4zjbj2jD8EQkhbr\nNiyEWfO9Clm58ioY1JHAC91NBn4KJWq8IFM/VxKuVRBB5aMJ6U8tJmDghveU\nFZ9Akmhktt6gBo/EN+5i3yO9CEM+QulY7d97lBAryig+x2b/XIrfupwsNHuq\nrcG5v8NL5webr081ksb+qlAGmeMMssq2toq/p9iPcfGI7elx0W+D6QS97irZ\nRoVIYWLmoydf7JQPQxy52uTe07Npon3hot1Pa02YODZiuo6TBbgE5As4zqhx\nvCP6+fgs7rViZgr6wjzVqgGloJOkLGLIzrWCGXshiqahrAPZOt9gOtMKJlw8\nsKzMTdJqjQEezGrnlEo8PvIL6rqTEivKxaU+358hGlDiW1/8gLVa+HUiXLEj\nFP99J3d8QJ0E3Um5MOIer+uW7hP/7wNEB1aI+YAtW5jJ0Fa5AK6cNr0e/EbY\ndnmjK7QLTDx1fUslGeWoxRujoXuw8FjiCnoG7bFZNFT/5l8Q8Knla6pZSHbc\nznpIfyU15ipvCA2bCH7dl+v5ArDzd3AIETfUAeWXYVU9iTYCVuf9uVOoZBo6\n55UZejUzLoLGX+ZCv69ZLRlBQCAUjsW+A6V9L2u07ee0AdtnI/3ghgY+IoNR\nY6hQ\r\n=+70W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1fvDzfyYG5JmPtAUiFwU2LH6YT1rR6esL9WO7rrOhcQIgC2p5EFOvFAvDlEZtSk+H55i7hhIeQR2dR57BvqsNWEM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.104_1573473481321_0.7423523216104095"},"_hasShrinkwrap":false},"0.10.10-alpha.105":{"name":"@react-ssr/core","version":"0.10.10-alpha.105","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"97764caa281838e33cf66dda4721b1d476bc17d4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.105","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WkB3GZMO9w33477IC+Sq+uQClxDIgHEmK2FvmBYG5z0RqtNzGXl7X7AT6nVAAq8NGC0qe92U3xw2JXceZAonlw==","shasum":"fddd74662fbf313de8d790673515daca95b6f1e7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.105.tgz","fileCount":19,"unpackedSize":44178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyU8CCRA9TVsSAnZWagAA+V8P/AyrBNmdA7J2RXDwghR+\nwsAPG2/rf92GLOX3W5hQZFvwVJCzI2GeLDfZD9a75AAFduql1dYfHJH+SArH\nWtECxbahgbDqrfLr4233yyuNkDyBeEaY1R/GEIgGVOHQ9Ye1PDO3EOclNw1l\nxAWSqjWR9Gbpk6iKNg3DDt/cBRFQmRsbmR7kxAwWdE5SG6cOU7l3e0waF6rt\nl9WlzDVBfIg2S3jhQgIDvPZ5s7LKVJbf5MDcUKhxNvhRY3NEf6OjL0jCjLDW\nJ7dPq874XjB62YurrEuldK5LvGbputCauOTvfVV+WT4XgZ0EiTdIXCrAj8Tq\ns+TIuOCW/m8whD7LPLwL7w3K3hMAHOt9GpjG9z5qZZj9ZsKwsr/ulHX6Z1bR\nWPfo+iq1LeslSQhfZTfL8EswswWSzWNr6muzvAxErmNl1kPxTkiLXKcmkHW+\n7sMw6Kl7w4VD27wsDwEdcoFg6JECU8dsLcHUI7roBwV0FPrDYCN5XwXf+cNE\nTnxjd01FCQn46nOry+CEpcLl89ZyRWzgU5a9DRw5cLudrxOGS6F4q+wpLFe9\nFz3VWduZgJFBd2JvDQX/h3LtO/mfsm0zYtqmJNeWKsAqiSMKRHM/aQWH6C9w\ng8ragvAOFaKkJNNbpqPYnr3zGwc9D+DRmwQJCItHZmFyzOshCzMwCyMu2uEQ\nCy9F\r\n=IHkV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICG9KEe/xjj1QMaJU0XOC5L+LUdXutU3AKSj6VaJjehbAiEA/RnHoY27+4QEF67i9nMEAFI4I9p8YMWVYsRohK7ZTak="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.105_1573474049492_0.8377016351684734"},"_hasShrinkwrap":false},"0.10.10-alpha.106":{"name":"@react-ssr/core","version":"0.10.10-alpha.106","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","html-react-parser":"^0.10.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e764309ef1506af86d52fb80fca046fe95f0572b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.106","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XSXXfh363F1kkLfeL6Lw6dQ7qVRxPQZw9YrmH4ProeU9Az1RgOmb/aLu1FBIzehpuT9pi4lUVytJuVBOhyEXQQ==","shasum":"25089b00621e4e812a8aa5e9d135081eab2b50b7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.106.tgz","fileCount":19,"unpackedSize":44142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyVBgCRA9TVsSAnZWagAATIUP/3prflbuUFKOTBvUrB4Y\nwsyxfRy0DCVS72dQ8PUSkMyua//DusrU85GoF6AU/oJL5knBCFirAbLe6MvL\nNio8QcOzm9NMLwGLzBgDZ6D/t4g9qU69kgyi03xDJ/T4ziD47mXCLSiSm0+a\nMROfYqFpfx1DY835h/g9YUqGH387q/7DoVpatn5uscauKcn4ysEPCnYq+8y8\nsMvux7WnXUfzrId7LpLAsC2wAu1NzalV20yI2N+H5o9RELJKUBuy6DHgxNEE\nhHzmaNJbAi8UJEBZl/bAerTklXEiiphDO8R2uNqNtTs6xvirfGom5vF/Naon\nrDX1Ory0+NNQ5OKi0Jv8ffwmRZrnCIl9eGJLXngP4nKekiuWEFC7bACDWPCp\nP3ghkrbvtTO6UM7eat8juit196KIzd/DRgCSmSkcit3FIVg0IpaZeWLfehZY\nkNFsQMUiAXgBOtTdFy+kXDCM/XWxB4FIccSsq7ZZippmd8rzmeggs5SNtXDA\n66Fuwz+uo5hTExjJQ1Jxtp0kM7lvFVR45cWfePYnytVAaEbixvfnekyDNFPf\nUdgPE0FF3gfIzPehQ4AgmhQpHt4IFlGOQvkYhsMkwdRZ9WmuukxegYQilvXJ\nRVpTpsLJ2G4/JIk/vZas1E1gFWxBNsPHLIjXgYuuesr7RVXsSKXR2oC3is+T\nn7xE\r\n=yAbZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH2lZkjgopKxeqtN3t1DT49XhqQPM82d/hyPcF+fhidUCIQDaiB9qP/judBJG8YscuCo/aAo0stNKe3i+R9lpYgNqZw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.106_1573474400434_0.6066861727711836"},"_hasShrinkwrap":false},"0.10.10-alpha.107":{"name":"@react-ssr/core","version":"0.10.10-alpha.107","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"570161bf42439c4953eddb6f692b19065a35c41b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.107","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5hhQ4KQ0UUwOXmg9BBhDLGec5GGdM5muYsQ/TUx/uJNszjut4SKvJYqkecO00DYY8EVJz9NK7WylnViVRdDtLQ==","shasum":"ca839e41d4a2a2c133cbabe994e993d361b4e063","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.107.tgz","fileCount":19,"unpackedSize":44076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyVFzCRA9TVsSAnZWagAA0voP/0IM1iT2uE7G+Q5ei3CG\nmIZbA3RhLDcUMt3SEKgqAeqqtcfxtukd4YgWawVArEUi9z1SD/n70uvHh9YX\nA5AopE1JpiCXheV/JqSpetfHWLhftz5FjXOcpBvU0AYMs9O5ETrkPaRdQ6xT\n/kq42/4v8blKb0WVID0/mMvLsJ1BCaErIagr2daJep7y6X297XdLTitPFvZk\nf/OYXjUUS/QF8xYE6Y1S5ubi+yfMm2KE9oVQtxPVb7340ArvZ8RYyzM030UN\ncY7zNIwMCRHhMV0o/0awWXK6EhNFSLzXFyQc1s3ZvMqmTcQp9oE6CXT/TCGa\n7I3LtYhSZRCeg4zBdn6Hf7dZsDAFLkNH9RoXu+kL5CSr2pryUFgvFtVQJf28\nSqRJvpa5qAnqEKfMLPtivStUaXEy3+Iub3kefDZ6li5Uz2DSHnJ0SD/DBLie\nyy+YF4/LH7WAzcrTQlNcDs0R0iB9GpTyCgrc1Vi6Dx3qVgGZstw1k9gW8fow\niGjzPQVRe03j13kTdxhvcws0qceeeSgZSEgjDd/rxyVK1rK0PMDEVp2EAL/K\nYcxyAcGbESxJGwkJ0lmYizu42SI13kiSJ2uGJLPbJ0kMD06Jdj+9/MJcl304\nGDA4aKTwyj6tx0MGOt7UuIjILQxsV9UQvhBD1qpkgKFli73bv8f8v3TQOE8D\nKAkt\r\n=qb83\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6vfdJ0dBtDNMsYJkagXWSPnMbuo5Gjg2zeMl/ZTPrfAiEAmWpHz5K2JABLO5GyKKyRDCCDhAgWo27bsNqoj2feIRg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.107_1573474668175_0.6666896556948634"},"_hasShrinkwrap":false},"0.10.10-alpha.108":{"name":"@react-ssr/core","version":"0.10.10-alpha.108","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.13","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f1f58c673f674a719db70cf8f911611daa0305ec","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.10.10-alpha.108","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-N4n1pS1+KNMN4vOrMNtKiZ42Bf3dQrynUmRQ4HIQyf4TcFH9vZw8Epm1+VlCZDGG6FG9yxGsZ6zVF5bO0c0FRg==","shasum":"3ff36c7a942d9f44f580259e5578ded00791fa03","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.10.10-alpha.108.tgz","fileCount":19,"unpackedSize":44076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyVJXCRA9TVsSAnZWagAArLoP/393hT/4Ka8tMQJjfKuL\nO9j9UhLvttm0prVxCsltZCd3WbOODBJzWCXUpFH303O/sdbvtLVEv63NgU1M\n5MKD8OSkfcWWekigQux7XLaPPw6XQPvevgvnJkelHdMEgmMK9jZYlJVI5l5R\nGMgzZ+XwM51z6rcb1nrLfq/0V/r83FShRC2+CwNXM/Q2Qdpre4p/iWAyvkAC\njjaxBhvNiE6VkF7/Orp0D08WKaYJr8t7kFhMeTlT8ve7PDJGk6OFxZ451AaZ\nj1FGABkhenxlQY9nvHFsa8afWhe9nNW6K+bf3UkJ7KGKgcRQKnJwV7kiFfWg\n5O3RTzJotviR/H69JlxCMhdk4apDVvKhVX/nDxLvt3IZUmyICIlnSxlJt/fy\niZw+N3zGnhLmNRM6FUJB8r9cqUhxBL17rZB82n7uAv2XSU+hPEowEruQtizZ\npUODt/EnCWXsXD3PDbmL/9BQYoO0cWPmZxSpLlNQhieL2q+kw3RTjO3c+5M1\nfhp1BiIuFOJ0geh+elMVzTpYg5tTj88djUhEuxTr6SLoH5gzCfR2YEPc4yBU\npEHCiK37OtO9oHhcyHtMXZ/1rTaGVebfc9f5F+teRodY7sPsvIT3UWpNCfUk\n0Z4RUDA/hDptew1N4UJhovUgHCtPK/4TTbJ7arZ/pTXuzW3eHh/UFgSmgRZp\nl2+e\r\n=55GD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1rsm1BmI1QUs4anwVMXooe1GWuBSZztlOCdq38m2u5gIgdsVOjlQVaF3NKBQrLB56z0/LvBZgRbBztv0+/pz25vg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.10.10-alpha.108_1573474902947_0.6363914118715901"},"_hasShrinkwrap":false},"0.11.0":{"name":"@react-ssr/core","version":"0.11.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5a722c0d8891e129d28c35d2d63d81572f0179e3","_id":"@react-ssr/core@0.11.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SiZGWfuWbB9jWlJV1fOU+iJTo4ZPAXVDhBt1DE0T340OdF7VL86CVMoL0WuliOaI+c3m5zWLnmU+4YiaJDEAFQ==","shasum":"5170ac30591a84ce4fb631499c460eee444fbe80","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.0.tgz","fileCount":19,"unpackedSize":44050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyV6VCRA9TVsSAnZWagAAV4EQAICUcFNquQmWgKWwe++B\nx7aP6X62Jm4zavaa3+yLKAuDwevsw4Q2gv+/TV29xUWK05dIh9Bgg7zQMEH0\nEgwDpx/XUyzzbuHb3t5GHoQv1FMQ0UncxLudwq8ggxTMC/GuJ51MRAgISOqE\nwuNkAzooV8/nuD46ymzNRD9B/ofzl8/AZZJpqjvGcMX0u3YwqmqBgiVjffh0\nOxUArNMcYzbEANt/VBNaZaaVnhAmX9sY1oZMhjf2oz+Tgo3sWX+8UMVwLWxf\nJBMYc07r1PpG1MzR7eDBzET7rNiMiutCjCV96NW68M/XVhHzBjaBECFPkhuu\nYzu1MJc4L+WvE7jvR2Jacv/pnHcbMWpKeRA6R7WU9h4RLISiQ3GNoDLlUm41\ntwQxkvEN51TFaOXU7WBJQi4vP318GWa6y8G3+4jjWmZz/DXsuUa1i2GRFnTh\naBja9yQkEgdtT36GDelmtKz6NWLLjMBXZAy6Y47v/wfiDeOZ3yNV2sdymDBV\noAlkdC/+UbBaHw2YeZ1sSpGq5/iRV1jHaEtBF1BNgLrMmJT2q/qftlIyjL1s\ntwAGaqiIf90Y6s7of4cU/9OqORmKhJuCXeL5hnPmhQFyR4nxWPEr1kBzCUWK\nsElgwfZGmq9X18YkzsflC37A0/hdMWeFucypGK8Eja5TfgqUaHTq8Np20vwl\nH0IX\r\n=t6tC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrqmdNPYxYso8a9mkGEd4ufU39ZP4HPFCq2FEOAQQf5QIgdO8bFxCXLg32hPHsyX23sZntnlXRtCCC+A3xvBlvZNw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.0_1573478037085_0.6873919506022306"},"_hasShrinkwrap":false},"0.11.1-alpha.1":{"name":"@react-ssr/core","version":"0.11.1-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"59f744b6f349ad6491a3a314ca7ee5c166be2cbd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gfYZDav1xTw7OmN2OZl4aGyQJSMDyU0Yyj42pF6tNL0wWSlMk5sTQyw0u24csrsx2wmXvYQvrl8WhejHS/6Gaw==","shasum":"07c81604374a80de15b71e4fff0da50820a35ed7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.1.tgz","fileCount":19,"unpackedSize":44072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWHbCRA9TVsSAnZWagAAV8oP/jZcUZfLGDzXkDIY8g9O\ntt6IoUjiUGxHFL55xOQywnT0Bdf6UJwy6Drft1BPG1IaIZ99augGiCzj6iKF\npdgO3+jC6QADg3tCLoyxy438n6hKaYcl/LcVQ+vDtyRgMFpmZv37ckHE+cAT\nC1x0xLes9qdMN3BmvwhHH4z12fLazd4pzedBiUYyl6nDs5hPomDvQsLDHnaO\nlPqXludP4o7j0Cw0AEM56JMyiwIfxZj/6nN05HER5Ah0QY+WjdsfjksuD+qk\nkj9Gt3kyP+xGlAjJyqm8lZG5s0EdbvUNtURE9oOTKQBf/MlkANYtbQTEQSGH\njvMuI0PdKCJLKG4QIV6NwOlCRsN8vd5esBmiTzRh97h267YZE28hOvHA4ei5\npYNlNOX4KsjFylaqcfvUFjWRI5jmd9rWsmvJ3zZwoHjMDCxOeDLkbWfQhz91\ndQBWhuJkBZdbKPx3Hj+o02XJ/ascP4c5aAr0QIjDUC5s3qv4/BQUkRxUVexE\naj/7rGWa0tEWsAdyXphM6jhWcYc/Z/Ak95rEQGAsDhp97zen0bzE9vfj9aQ8\nJ5xoxRJINCPLYxsNfzPT+TIFQECttg0zojbXjD/Z/RW0j5rpYnxRZLuocuQ8\n4GAWMspTmsDEs01nFFOFkGj0qNQLXBTGdBbwlpT9TMwn0T79Oyy6vsgZVJYh\nesvm\r\n=53Lc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpPUyngV6uqUjlhgbOC9bHPh/DVMLVE4HDZc5bUuwP9AiEA8MJhRnNC8ra5Gt/GH6MjzdoLnesuE5+HXj+Rnr+sgpc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.1_1573478874687_0.4197165506931235"},"_hasShrinkwrap":false},"0.11.1-alpha.2":{"name":"@react-ssr/core","version":"0.11.1-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f96817b965fe920c36eb61097cedbdbd046cb266","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-QFALNzKoSBDsMVMVhUuaEQ2Y4YtHnWTpHmsIqIIStVDW8XjhaOL3NioKcVVgcCCOXKQY5M9x3+qLusYc4wG99g==","shasum":"c9f90b6252b9336058fff11b99f9e11b53c0924a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.2.tgz","fileCount":19,"unpackedSize":44007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWSXCRA9TVsSAnZWagAA4CMP/jRX1hAX62BTqN31U2Pz\nLxCD48RU+RfVQMEspNvViDjS54TlEtfUhPaLKcVnkShfZXRBMyP8YG2mGjeV\nrJMBYzqUogGQTSS4/UGYypHYnF90NECeIxH0oiD+gGKs106aZaBsTcI7P6hG\njTTR8nAQCP2flkgQ+OXfv3g20zS21+PkPDkOPq+DhI11NF6YkZr3XU/IKCUN\nLHK8hJDjh4gZByuqrUhHzV7mF24hSbrVCANIpjsKi4MzvUzmkaDWGpsSqj10\nqtUUhJjPLKuzlPYo9EdvX2mjTRYgMKZkrGTNjVe0Mg9vVTllsGXEiuUIrSL2\nJU+bBTrK/7s/fHVb15s6p/XDFIze5qwNEG0J0MnFscSIAP4iaWAJXfWwfSPT\nAXjyFyMKHQCmYPe++HEK9gupdz7fVpy5Z9d91ZtFO3nMi5isqPexkT2rxdTH\nldpAQf7w74wkVlxPZ2nhyFiQoHwDU9bL9WTjLuccIM0TRbdmuWhemjOHYICZ\n/GradnRPP4I34frWDlH9aJFNkzR5851iNy9TNXTBdcI/XC3/wI1INEB1SFaS\ncCOeU2N82nTXHZQtSr1irSypGfFnbJl1Gtl/zFZlKGpt5bB6uWum4ePxCL7v\n8MyZL3HYGYgOXeto8F5NyJRwFxyggIzwROX1EwIvx3msw/UF/0wgB3FNtKVj\nHr7q\r\n=bvqI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH2Zmj7j1+oa9qAurQHysz3vgGo3I+qzq3z5u8B//uHxAiEAl5We+ZfdcmtO5sxm22DTxRxY6NlsliMZdUv6/3xwc1M="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.2_1573479575243_0.5595885523089303"},"_hasShrinkwrap":false},"0.11.1-alpha.3":{"name":"@react-ssr/core","version":"0.11.1-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"761c192e3d1f868b83e03e5b5c27e2b381aff420","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SSd0t/XBe8iekPfCUSKvK8tAqKlQQYlnQYoy91Yv4MKRQis5uY8hVJQAlqrln4Qtv1X8TgVgy/lv2hhqdsVHbA==","shasum":"ac72caf94fa71cfb5f2d7f41e1c45474fdbb0f22","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.3.tgz","fileCount":19,"unpackedSize":44001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWXYCRA9TVsSAnZWagAAL6QP/1AzpCpPgxjrT64FmCHe\n5fqccIZLCOGC7V2HX3bK7gUNFBgADD1SGNc+NuqZ+bL7j7puNhDx3eIKSTdM\nH5KAvTHIfPxB26MHXFiJqhFKgDKkoSTpJrNGXPz8b8jiAYxnFfldd3GP2e59\nzJ5HW52vWaNEkunLfdgf4CHcDfmy3sK5MdmvKcrG44Er7UZgYIC+cHxX/s2M\na4WOOAn7DpBi4O2N+Bb5IQUv59/AvDis4qnaXZ+8GsKoOXQUn4PpD7nGz8Ks\nU7CgqLcx1sUE4FFB5W9ph10epypplAvJ/jpiStiDqnSi5ViZc73IBGJJYKUb\nlDZnX8Tn/FT15Jis+whNqzTkhRjoSIq9e9LBvhTE93UDeftMhSAwu+LjA3os\nLVaagrzWZXeFhNYPmEtuhyUsejan7RE1s+2Qf+GRIP6wYTGybJ5mkoPyhuCN\n3kjNMF3gzuhwRMcTu69B6/s373gB7IcTTtoM3X/Ojs91unv1WFCSLYZvVpXu\nKhrp8hLLRsa2C0pQE5vQAdHQPbri82g1aAba3dZB9o/70yTc1aamSef5GMRF\nj6Mqyh3tWquCrq6Vw8mKGgreDscPoSlafUFQNxxf65WHubFHRzimgmSvoz0Y\nRxj7fgMxqpasz1xX/ztmOh3CD6AqgsQfgwplve96jYvUMslqr4FKrPxFgaLz\neGvs\r\n=Sn1L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt5SaZuXKsu0uA4sp/irtKVCFmv300qdG6mHfSy9tjDAIgcaCxqeBznmRQN1GGTCJixZ6VvmSnjPi08Y+qWS+GY0A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.3_1573479896203_0.5452568935759892"},"_hasShrinkwrap":false},"0.11.1-alpha.4":{"name":"@react-ssr/core","version":"0.11.1-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"65cbaf78e0824d9913ccb703363df74683480907","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-uMnEXiF8XbM29igZ2/m2znyr1WvNLYLQz83iOMeDkMT2FyF1kzhc/HTloaupU1UhbBv/f+jbl8nJ+90i9y/cXQ==","shasum":"92270d69b66ee5f7a2705b73fdd28aee0a90427c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.4.tgz","fileCount":19,"unpackedSize":44062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWlzCRA9TVsSAnZWagAA9CYP/10Pz4v8v9KN18ZAYeAT\nxIgQPom4E25c9NfPXj0dZvDiQPQjBEbVaFqdrMA10ZbrtbJxwayu+pUNs6Rm\n9Aj3qMfYH0uGVWpF3yOLr/VaRn/17iTueo8opQX0HYA9HhxkCxETK8JoX49u\nhpnU/RQZkUyIXMweuY1mkMBQB1dkVdJ876sLl9wX6Nnye+C3c3MxUHM4++5j\nsSLADFcOykWqskMs/fIQqNqycUuQhn/DOrW7v1vFvSYhtgmBlWqkReIvCT/N\n5ZuGHSkB/hObXmF3wWf9hepqaU2lY5Ph9cUSeUmGZEfMqBXII/aimp4/uhQH\n+ziNxRS5JM43vkNoeKzm4Vo36MtOUIVASt+JfchWtkK8rWnN++aC48DMDL0B\n8nC/KiqqP4L24X2CP/8x7QJSUcD1bABedmSKntWyT+/4JZd3oYtgCmX3BsN/\nrBsuW2KFujdG9xDnHjk564o9V4jlfktOiA2rYXT65aamMLoBJdHQ1dyIfB9v\n12IKikgbJ8qaSoO6J+UvbjLVhoxGFvOydW1TV1klkxQhcKHprDRfVDDK3H62\n+ySNkGsESDWOIjZEcwgGlUdiEufVu7D9VNcRckYiZA7IsSmtf0Yp/1twyMUV\nLrSVor/FrRSethHF34nCDPtMX8I30ajP5Cj0Ht7bapZMdu1ShCNpRBa7Dspp\nmw1G\r\n=Gerc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcKSzbYHqnPEBihEEU4PH88/UrAFdlERe3RnDU2My5jQIhAOdjr51lHDdJKp6Sw4n7ldu+6sFDf0R5JRBNTBJfugJD"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.4_1573480818668_0.8324661215137463"},"_hasShrinkwrap":false},"0.11.1-alpha.5":{"name":"@react-ssr/core","version":"0.11.1-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ea39f18e6040e649e663fe1e55b8eb901bc56202","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Uj+nv0CVUot2OUhO4mUrFEzJpHy/WBfsiq9Yqo1rfOu4eeqB2DLoowoW5V+4TpaHR9kuZGgjSJGe4cwiuw21wA==","shasum":"08c47855c8807e8463ed002ae7a5fdeb96d9f4c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.5.tgz","fileCount":19,"unpackedSize":44188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWqXCRA9TVsSAnZWagAAmB8P/ihuIEXFZzEXYKN3WUdO\n0d2Y+HACQoET2MUo3ytUbp/L/Sp7HcX/hVyBsb2WDDUGS6nKDLUCwwvemm8B\naPBRqtH1XGwGCgx+jO837K3wJUVXUWbLDTjxItOIGbWUgBDNibYtsRacwj7T\noP23y1Nj+xxxjpCQON2AIOpUudnaGknci71dTyf9EhUlYy3fnt1mXagWp3e0\n63V+E4qiMlli5Aa4IgPN/AvF6u81XY8TmUFQj84NBH+jNsRhN71c/PAihAyt\ndaurmJkoyU08zCx1uenF8HalA0tIkdgfnLsuwVDJr0HlsGDNIPBWnQXI5Jja\nYcyUCWMOjJG9XJpiGSZZEg0lIIIrR8YgHd4HHdWK7dr0ZBezobDiqHQoqAro\nBq1vrf0FyksZyc/S8K+PSmXtU338FZxq/FMU8SDc1quqGBxN/9qEMtut+rmH\nV6HGvOhrep9A+LcGVW+q4PLdMJ8g2msaNHaD7yzQfcM1YVay04C3Dg/mrczd\nYf78HXj8XNpGcQ4dn4LZOPmbC7WWmEQQaWMMJ3V8oDSavu3HUCCUCw83Ts24\nEpaxwGrKdXejztyD/VqNgxYu8Q1EDGJkActbEBPDeCLeUxHz/BxwNWCqhq6e\nDHSu41kxdruhuJfdXpHem+rTSBNp17FsiKKe+l8nOFfcp+ti2ruX3ofFJYBW\n9lOY\r\n=LVRR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn2fRJE1LemMtosFc/dgJtQyC91mt1HfGSPGyTEu3xuwIgLV5mp/IlFGSRrJFdy1EFtkkIFVxekztcnlcL7NM3OBw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.5_1573481111415_0.6383849484910442"},"_hasShrinkwrap":false},"0.11.1-alpha.6":{"name":"@react-ssr/core","version":"0.11.1-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"46183082d893ef1d2037ac1c68603ffe4ab9f4fb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VCrC5r5WZjMiOm1jwmE/YJ/E2NGhUAhCiGoCuCJ1MRP511tKctxG6v6bjC0eoMfsNBybk3xv502y2YIcGh1oaw==","shasum":"c3bc6605d44ef4a67d0ec0e9441275d161965195","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.6.tgz","fileCount":19,"unpackedSize":44275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyWuzCRA9TVsSAnZWagAA2gEP/RCyVmgRsl0cr0TOWE2O\ngl9rYQmPXkUe2yxo/bWo1mkJSQ6c3inv2VBgFhcQIEFVRYWVgmXOa+sVtWep\n9MlDzbB7Igu3wGq8G+Fg/VQcvnnxJJn6zx9lvWLitR9eMC77+g+J54Di/vwd\nVdfePKbgPFl14z7WxENvWOajSE/qgLy5xJShB4OgFvZ9SRW8RrzpLcT3BOKn\nP61FdsPya7ga8vjX/h1xsfYyUTMud9hg9SLbXumM6JTgE7Ab3OAUG1MeH+KB\nNsDKw4yKUZARuosAtLBWC83w21f8CwIClYnckjr+A4TWpa1dxGRQEXH98WGx\nCjFJbWsD7iHXzTNDZeUHHMn883/4Q6F+PkfzZcuq99vB/oZ1+hPP1edp2iLx\nk3cw3UZXjHpGjRRQbJcU8whsLtNK83kJrYjlt6oS1DE07Eocz1cBCUcNMu87\nLIa56tcpxglvlgxIeOZLnzxMZ89rOrOp3rbs8ZxDhCT+8A1XtmdFRlmUcslM\nYTCkhx5ogKNiw3OIkWzxxSIpckgmlHavHJzVMlZyxBlXtxL0XlzGdCkwIx1T\neSjZ1XD9mgn4qrKXCI4VnICpkvzWHE81ugoM/CLyPuT9n/HsG0m5fjKdi7xk\nqy31P4kWf6tl9SLWAwxXwwvAQQ7iy3kur13DblKYDI6Q5HaH9tn91YuWW0Rz\nSYHL\r\n=QE4Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSpf3XJBmWbZhxteT0NAYN/vC0Id5pnJCqw8ar61r3MQIhAJw4AJBru8ONAtzAr5epb/hfWUwI6zRoRrgeW7/a7EuF"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.6_1573481395107_0.46234661844104785"},"_hasShrinkwrap":false},"0.11.1-alpha.7":{"name":"@react-ssr/core","version":"0.11.1-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0a4a01481ac2aacc78800816eb324d32c9646868","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.1-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-kFZL1tyIRRFEmL0rsmdhzDiD+jXJgeRyknqQnsD0rR8j78SWzXspNv9hZZV0gMXmm07nLfoy0FxZwurkedjn8A==","shasum":"f8106d545150d4862b54db37c63eb18dec9ddcc0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1-alpha.7.tgz","fileCount":19,"unpackedSize":44117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyW05CRA9TVsSAnZWagAA2fwP/24E3DnQysYv/1DRA67e\nMU4dXU7VzA2Bl08brSpte17S9VzoFCnL9sHO6qVc9Cv9r8Ydiv9dXr8CsPw9\nmCG2NBUTwxXkEGKZWBVU8XAFhoTxwUKGNcmIohDgmEXSFgUhk/PLTlkVKxVH\nTuUkyNYjnYQA+B/0HsIsVFaCcz2z89IfNsswCR1vPKaT3/bj2wkpfpMGmzz1\nvh4W/XjeGN2w5PT1X4JTkjjqz9W+Dx+F352+UQ3vsjN48Gy9GmERhOKzcWR5\nW31W9KywKhtmyJ3go099Eo0NX1zU0P2IJ3s1zcAsEgkTDStedVf9KwEDg1Ed\nrrsnv9E5B4+odD/Tq6O1dcelAHHDBu5J2sY2pUCUKgrVW+jhbZT74o7o21q+\nVgBQSHeM2H0lEoHDZtCdqevd020ClUZaalfsvjSSHKxIR25EUeaWcR8MMElL\nzcQAJaY6XJQqWjcEzXcknbu4rlsK7bEYpFZzbQu4zvYnqAV1giiRbqQFN0HJ\n541s3BQaE6afGMwU81j7hzkT0CAfqkFE4w89eCvi5v+WImMF/gwVDsDS8+Qc\nteC4mjnL8xdrwZ2ZFk0dI/fmn/aBNLvfy0hNjWpxawIAawXanwgsZTIfGJYO\nq/z1Hm8UOYcYAxvrE/DijU6wUZMmFIxy1cTNRfzacVbMhpsUinrAzAa7pfP/\nLbhx\r\n=EiOq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD18sbqBVDiTlfkrIQk5ndYuJYthduF/ljBnYleG3BZjgIgSlR2g101+78pvojwPkVPGOnTW28I2nNI6U8RYAJsWE0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1-alpha.7_1573481785570_0.8152625376384957"},"_hasShrinkwrap":false},"0.11.1":{"name":"@react-ssr/core","version":"0.11.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6329a5a4c64ea9ad1959ba9133a04d96c8c20956","_id":"@react-ssr/core@0.11.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Kbiwc3ZZFfKfeVbF/lX2ho+hlyJxG2efHuSNQj3KMEFak+1eKXpOKQeeJpLyKS8GW+fV5JLThA6VXeopcqYReQ==","shasum":"8a299f0a66ed3f1c88a934132e3c13fb16b45885","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.1.tgz","fileCount":19,"unpackedSize":44101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyW3ICRA9TVsSAnZWagAAs4cP/3GlsKkW5NrCEbGnO0R+\nZyAnOSTcoSs27825Ql9sYKCQOX3uNdYXWMPezzkync74HXGG73ZglZEC3pmU\njADSEaUKL1LuzG07MxhWkB2sHjVFhvv5iQBB6BnOe4Upfa4HyanpMuhjhBJi\nmlA9iXlGnRtIPUbDcqcxQf5+udCinTDsR9DMswjcMIxzJVOS5OropnvTjXnc\nl5ov8ED+MQ3nKFk5B8CpMjYkDvwRkImOD2DKuJfjr9+YR6jbPGnv/5HlfFfi\n09Vg0aIPwqogfe9wCSJpOi9ML/j9YCSgSL/o7eGx2W1agYItAhMXfwD227Br\nHnCM7EYkZjvbZFzYilhzZDtYMDUD9gncxMp5pUoU4aoKpe6PAp9iQxR43+j1\nulcT5SczE42C/JQAbLNsx0bs8soEZwf5XGHaZxtzoNoYsYgfSdtpC0Ka57hM\ntGxrsay7s4D+Aic81ZlDVl+0t6UZ6JlH9mbBg9Yb+D18liHQYJicLlVrndLI\nhYLbHKWT8KOZpbEg2iRVI+01YB0Q3pkHeMjpQiYEbq5EpRo8dGmbM5ue6WK5\nm+eAi8hUp3puaWbaxPBADS6wsjAn+Zttv4iv8N0SyltnAGkto2HPep16JelE\nYdcfWkvPxlUfJXMxjh8Hf0cwBtIC3gfalfC+ZV1fkR77xl9tj2lm/tqg4Scy\nE/06\r\n=+hrY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlmLKDcPh7HwsveP4hYGIg6aKZ3ExPQw4mjXpv8PkXoAiEA7b6KfK2xIF9Crv4LXGzEGiqYMgyaKNBVMWzwYtwoeP8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.1_1573481928047_0.638283388629346"},"_hasShrinkwrap":false},"0.11.2-alpha.0":{"name":"@react-ssr/core","version":"0.11.2-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ef9545f24ab2097dc0ba7eb023f75bbc86cf131a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PypvmLQoWAZoporKyrjmlmJlS43o+PXue5oxI7JpYQXNOSO+D7zDhA6FCvhyXGQAUEG9voD+URN+9EK06dqLUw==","shasum":"d4f8eff6589d0b3ec6f49fbfb24a4477f62db8b4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.0.tgz","fileCount":19,"unpackedSize":44206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyW/4CRA9TVsSAnZWagAA05oP/RjCeTK6SeeRYJ2/i4bV\n7qOdjE9vRSgzGsZ0pF9kIOSbjrYd4cHgfVw10am4Gb4fZiBPCWxm8IvLpcSc\nVq+Jgi7BDmDqNhyy8v5BGttce6BzavPOoENqbz4qDQGCTGH3BVLAJTpnWRlu\nX8WbsTfCDJv6J6TbrGr49ZYJceIt5jG8ggA85Vcrdm1creq9pgGBVFYEPtRP\nFpa1qfVl+Jq8A64V5uXCoqGU3a9ChScQsczdFPp+6Rucz8FLa8pM7tWLU5d3\ntau6RlKvrYpKy+GmdaeL+JhA9n6HjzXEVFDgcvp8kOW3pRhZ/dux6VU5kb8P\noL5xshzOEd15mrdQUdjnWymPM3ftrti0F1hajewfuM5Q/raDC5nDroiJRYWP\ntke3BIB3gHaBwtO3EgiMIhJYuD9i/GqNNbCpUBbKSXGdrKSrMajk3HiIXDnr\n7SfufMKMEsfSRot9RHooTCkc3K2WMoqSEDmV/JjhcKmNGoiyMQAs5TsI3zwC\n/mNlxPmT9+6JIR7gOyNgSmWrNRV0NeeMXRh/J8A22BvrRPTlwcYqQ+K7sb/u\ni4BvlfjhN0x9XrLIeJYRhFmRwWwDdkpL4K+/OYpa5EbIWQ1W5xBmZ0xqjh/v\ng30lXx9QfvYQdRME9wMJ1ZQ1xXY0kyHEujfId7Hb6zUlDk4paDXXocGHsEnt\n00l4\r\n=Y3ce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4PzGpvWuMzfiXAT4e4DuSe6xZ6Cl/DT+waplCSmIfBQIgDkXLJ11uYGXj2cHwfWdDeY+XT0gmc9WTwWMjG95NIro="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.0_1573482487898_0.16105723719766285"},"_hasShrinkwrap":false},"0.11.2-alpha.1":{"name":"@react-ssr/core","version":"0.11.2-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6c81f756864f6758c4ec46c463a75f58d0269d06","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-suJPUHEZzrBiqEZoiPbv3HXJ9nfYBjDTGkndFAXdVnFg68GCzorE17YV33mId218fJEi+tYeHqQc3JgXjMcxFw==","shasum":"dfb6a0b9dc8337137f17163fce98a7db50c9b491","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.1.tgz","fileCount":19,"unpackedSize":44230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXJYCRA9TVsSAnZWagAAOAMP/1DMzFteGmaYBxM4fmqj\nSVdYqvRZN13OfFXJReVg5x0qXSTcCjIjsT4VgYd4lVGamvKgck4Hh9oE8nup\nnECL6WvYVb7KuLmEfxpEGDeSRoN7rRAQC26STWY/x6gMA9r2RgaBzU+9jA3Z\nAt2FybHUI9o/xVbA3XM7si8RajjAG9s+E1/0wyyrIulNFW1Dh1WgrIH78Ww4\nbGifvctMuaZ679thqKFQEHuzz3YD4suxsFnAKtAc+PGCA27DuZX69sScKuxU\nBrcRtl2ERxWIrAHLuOKGS15LVx9tPdQQJbOKslvofV0VqgYNLonuSnkKexiF\n31dFXn69y/bG6AeUWqUgxUeTmpcxzgEjTU6LA6aVlZeBUUM96NZQI1tc6QSd\nKpjFLez07lphjfhXtJPyHrspzJCuaEfkV+KvTdM0OW5hQonBpsRG3LiehzmZ\nov3ERI5NHCVfgk6EZhmq1NeJDpxYJChQ1QhnUNYgNmo/0knK0j1mOGrKIRD1\nnjWzapuJpNvhyfy8uyVv+WL3h+HLmTab/OdG6uAIVFj4oMqU0oiQPltuZn5o\ny1xR+GUeqerWIjDnzpVKHehErHtfw0gifb5yKp2ZKSiKDsE5xYoTrEMjWL2K\nqaZDq4IRwD2uvPpVwQSW541ufaBx1Zq6+7lMv3AQypa2vfZlEOELJ8Hk7p02\nTzyx\r\n=dLED\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6cjyzJoJRDIxpEt8XhA9GHpmkXmPIuNF9679DH2dZewIhAKrez3wioBFcMLtKoGc0DT/KuuOaE/7JiYGl1eWORMtr"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.1_1573483095931_0.6471762062287412"},"_hasShrinkwrap":false},"0.11.2-alpha.2":{"name":"@react-ssr/core","version":"0.11.2-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"305a34205a3d03b15ff2e74ba0796ad0b6737132","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-eGNQHj4b/XQk1QNz2/67LNDON+YMAxP5OsiD05v+qzouM4wdoI8Tyrnlz5RE/BFLch2Meom+4wDs8ufY4yKXPw==","shasum":"7e517995b7f72f65ca1f6e3e3a629c98c3289865","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.2.tgz","fileCount":19,"unpackedSize":44206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXLBCRA9TVsSAnZWagAAI1kP/1bptfpzbOYanQicPTXD\nE4gdfjN78202h64lGv7R8qMUVWGohq90tovli6j9rhkgoTMuak4j4A7V2/u0\nBV7H5uwlR9Uvc5Dc/ejR5/sKHDKSpkNRvxB7e9vVHWyAQnlPcONCtf0bmaJU\nJBNAul+gG0HHh9ddwhOHO+R7W4j3F8z0RkIQCjXcRgx4KGVaasoQT/qzw3u/\nryu83h1cILPKofQXxJxaLREYczPUzYbeOA90LY8+8xdenxftqjLbQmp2mXAM\nG3Ydf1CszV23MxrPvpmROoGDZTKWfJEhtJWevp9G5v0bSXvomzgNqsDCb3UH\naMJfNdgLnjFMfPJY4SHVUF2bSHkzrgwezXSsbt81HnUsMwf8jNmlKpD4bkiA\nTeZhRZc3TeULXRTRyhgX/dE6eylNkW3E3jcIsvoeSDtkVmhffVmBzD1wcunX\nVpZotIAEhk/yFscl34ORF7NyutVUVa9OL89FQYUoHZqqFqzriQ/WDFyMIk4V\nvHOc/jV65pRDkooE5ELFotyAEVUMbpRbyTZ69nuctYv0+klvEf0ZoHCM66DR\nZOP0JlAY54GC8dpG6wboMMWAkPtX7BiQqJNVb23AdKevazghNP3CI2BMkx00\nCt+jAFq/BoxKRFWV2xHf8Ey3GiCk2R6bDcOBs1ceVp/mCmW5vibp6AHTSOrw\nix9y\r\n=SAlZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDki2ETu1xVS/WBQ2Fk0WhFCsD6uPKVBpW8wHmiLAvq/gIgFNjWcillOJch4tnaf/Zs43jRhpCOt6WSwRluAND/Meo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.2_1573483196408_0.9026434054854482"},"_hasShrinkwrap":false},"0.11.2-alpha.3":{"name":"@react-ssr/core","version":"0.11.2-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3468d22e4e9b87a067df9be229ad3b876ba0feed","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hrzHELj7ZrhzWEjwuLaIOvwgoJAWgMh5leAxNtmX1Rq6Tw9F7+nl0Zh2S/jJUOHT6j3cg6AYhWkLMRx3WZyG6g==","shasum":"98df5b4ad5408a04d6d36ef71196a3361da6abb7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.3.tgz","fileCount":19,"unpackedSize":44325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXS0CRA9TVsSAnZWagAAUsgP/iSyzF/RZ5SwrEQlXRCa\nc3aCFk3XwdjcZy3iEPOsL0wh5Qr3LcfhHi5tNLg/LSAUTuiqRc2nWf7O7KVj\nARIUNzD8SDLyrZRZbtffDtEOWVIVTDHBWaGQuNQSeaEErZy4BFjxYAC3lsGN\nj7PS5g4k/J3mPdYckurMrtxcldPqrRWMXXjHbpQNVu07AvI5ZwcTmhnbLNXt\n0gkNwy9a3wamzMfFuvXm7WFDCDGVcyvHVmcY8gaorlciRcA3HUKg6R4TqI0w\nv3+xZsYvMQ2tM8LFYmiFu4o55ulPEuOmVqwH/Yt1RHT30fjv4WV5TfnDPG+f\n3iGWt26yKHz1albsSEMEwL9vy9N8er3aTtUxeQld2n8VbHrkZNCT9et9q5uF\nJDYrAQnHRJcXn1ofAd1iN+3qvqdsRCD6G1VrwptLnH7izXOLniEhMWY/8cYV\n5/hbx2WFUEGbyd1kWOYPd7sPv8+M3t56YmBfwoeNtjv8f5lJJlNL25BhsZCD\n89Xb6Y4QmzBu64wtYxnTjR1Ty4mp2DQfbaUwPhvyXgfOmfyvWM5QtPuPz+c2\nOCHIGJ8ZKgqKm08W2vN63MGLilmd17CpYUwHP/NHiDFT1Gf3V0QWwaeCaN4x\n92cSrYePYwr90LelQI+KLFGSg5SX8CXZOju/qJoHDpRsQ6d/1BfhLWw/1eZA\nFaMq\r\n=i7ac\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1UtiFKikNvsykYSSq6AQADb3ZO4NFzMPq+1nMxrgYcgIgP3S7fCBuoV7m/OrGoAexFmcPqZ5lPr5I0v4oYlmfIgM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.3_1573483699568_0.03280580836844571"},"_hasShrinkwrap":false},"0.11.2-alpha.4":{"name":"@react-ssr/core","version":"0.11.2-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"441b5d6b193d0b077023fa0cf37b1bb8308fdb23","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RsohNJLMpeeJ3fXciClEMvfYonAvqJt9giEx1pW98fHbVa2S1l2JZ96U8u1yiN0DseL0HQZ95BH2lmDbcf0hwA==","shasum":"8063614151e4f1eee78943dea46167dac09b73d7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.4.tgz","fileCount":19,"unpackedSize":44325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXUOCRA9TVsSAnZWagAAQXMP/1f+iwJNhKeyhgT9gYq+\nOmKyOlWYAfPfVAPj7fy9uKJ//vEf0D9tX4mbvsVQVwn960M7PRNs+Y9/I0+p\nPBIYpXC8W4spWQiAVweO3sj3XZrTdlc0qlzmeTHpSoMs8lGM38P7RpL671m7\nfRDkIdOUkXqmTGLdSXVygPI46ARil5/y5Wz73175TItkx44caW8BwmvbHyhE\nC/UiKb4IWDgwt82wwtPAGMd+NW+/A6qnfIhDUe668lQbnxucOe0eifT9Xoo3\nA9O/rbEomo5ciVdrINLS5+XJ9FS8wjnpJVNTaWG0m9csWLwyHJeUXUQztFcV\nP9avwJvLpU2Fuqa9gNrAZZsynp46G2U5t7dixSlo0r+O2f5LdbYqY5troYHW\nKWQ9sY4wGXlxeBAIo36cV2P1EzrZDuXqaVpdD278MI3h0wdFZyfpbWHxroPb\nPy6y5ExqQr+NQC0htvSHzD2fzAOTD/HPEzkUJ9Cg7TtkjrFG10XC7qxS+3q6\n28YjadyvKbtkQYFOp1ygDUsaOqrEydQnM9HRmsKhAoMBHrFHNSyV7yG4i1xm\nNSO7wkayiVOIV6u9Bq7L9h+bb/mBQJIDwmfFLwY/NprgcmcqXQkHG5VTGOWc\nBGF9r2JCGBWazGGT2vSqaY1Tttwlnlbg7WDS/ztoFT+ie3gNwroOYF0Byrdz\nAp3u\r\n=E0dA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSB4un1KuKJF1QSKjhxzEDYxxmGf1DVoYuQHDLTK0V3wIhANwooqVf6DrG9oEAL6srFkgY/UuqHjE+2BbyeVK8uQo0"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.4_1573483789962_0.998647910233659"},"_hasShrinkwrap":false},"0.11.2-alpha.5":{"name":"@react-ssr/core","version":"0.11.2-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d006483b0d92488428dd9ae768b52d94ca995811","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IgFxo+1L9A3U8flfof5nkytZufzxsuanKFzZF2EfX24BzHLd/1/iyqEyyw4g4U8NIhEv3njrxYxIv4FICWWimg==","shasum":"b5ebb3bb4c03501544894769f1064c28b5708f36","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.5.tgz","fileCount":19,"unpackedSize":44307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXWmCRA9TVsSAnZWagAAmC8P/0ZyujbiJJMKIJYgnN7V\nlQTbn31nm+jaJjX2agaNNTu/2o7+sw58Aad76Eg00tuuantNDjjlAv8mAqZk\nFN1SiGo85LXWHb96t978SDxT9Xhp36gTBnvr060fPC4vGBPs+ZAnVf4CcsEw\nm91S4stgmxbzwRcstLAdCYmO9bJTRdbQr/4d4p/LX1GsYtAqEkfujOqTYr0v\n4zkpXHV3OS0mhSvAn+ZFaZfI3FhtL4+f6voVD16s9zjjHluVAFqcnutKM63p\nZ6PPFHY1JvF1xs2ECAMiQdM4HZfuX/Yhg8RueQ8wtgupjWaKdtMsoMZqlZ7p\ncGyiR1sNCmHGE/ZuWhcxmEG6y72yOlnHIdp34FCesCPllqE7H7wyz6L5ARM4\nJfYD3AYnTYA5VxeSxaAoSoLmHeS5ExZhPRbKcrI0br8u+LwhKstpYIfNd7e4\nxFbUqPdtvOTajtc3fKca+LPklbSivhDZIncLde38yTbEugf6Clfkb8y6vZfE\nxUjPlD4zdFIBXg4GiQkAUQa/5r12AaJCNu4QhbLz5rxv/hoVXtFwzHzpJYdg\n5j4M/fU0cu1nAqTon+B0yqZNCoy47Po4TdulODrAvRCVXsdfMyIFe5rq9Wze\nEq/+e3nwgM/G3S1AmOXuZxr2sxfP8g0zXxIpQgHFOOzFnPax77RcdGnAO4Os\nIRUA\r\n=y47K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFoFZT1LMYcj52C0U0V+XwolMmFw5/DG2f56w23zEcXfAiEA79XvLRkaIoosSHsdo7AYVphyomjSVkpPdRU5qkIfMGw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.5_1573483941497_0.10572945033429959"},"_hasShrinkwrap":false},"0.11.2-alpha.6":{"name":"@react-ssr/core","version":"0.11.2-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e46a9ce1badf719f33fbf72e8a4ace769d0b858e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ju5He5KpBOoeR4tWHTVfZtqCGBJDp2W1AGpHW7H1uF40++Vm6ct963NLEov/OXEFu82Osh6p0Mf8B8R9qUhJWg==","shasum":"e4660ecd1bbb573a9176634c3a36846e815f3020","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.6.tgz","fileCount":19,"unpackedSize":44292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXYbCRA9TVsSAnZWagAAj6IP/RCXZMIMvqdQqXBplsIq\nzDbsn7X8FInDN6PAFUC8RDihEtCAbZ7VwcJjcre4pjMxibNgPRF5FvfZrhDa\nFXItdo6YujFi/G4d2/x+YbEwuR5B0ayCWNs+OoW1AJFH/uCcgmRR98l5/38s\nlsWo0ThKpHcVX32c4JaOoCWHctNmHL6Vq7o2kGZmwIHJVnv4bXHqbQoIo1CP\nNQDscVu9CU3Euj04XR77yXUboe6p7yF9ELaN2/+yEuhZ8JAFAEbAhZcsXekd\nq8jVp+iVHVaXgEOc8OEWI5utusCdH0sIOFKppeQ6I/GtWm4Sej481odMh4RR\nUoGi8WAtnuflxwbpJcPe/YvAYKwmhBayOxuDBOqiib6Ht2TDu+p0rfPFf7sM\nz0G3ipRKzxBDheuU9VAHX9e2mynZ7NpM3SgAXrO6Wc8D4Rjp3suaGqEg//6J\npK6JxNk7rNul+3OipQAd06Vjvzs+LftE3wvamRLUz4onX0dKvT5+nXTWJpvq\nVGoqPukT2T6eI1KdHIs5RI6T+4Wp5gSRnAjRRn85zFShx0HYH8v0YKs4L190\nXkUgIMwfD0xWeHGSKLjyPqAY8hQYlsXczcxcJue1FBeabqKZnmQqib2zwiXp\nmfYmjzBuOcXJIMn+50y6l6B0D7Mj2TkUslBzw5MlkAuLPMoqkR5ZFIJ44fwO\ntv2x\r\n=ikfl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChL0UBujjrYaHybHEE6OyB9k3c8S4ssXUZ6+Oujc8quQIhAKw5fCITVgA8271Xf8qu4xfQ/IsbXnKsW4WzLgoPBhbw"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.6_1573484059088_0.698335131588931"},"_hasShrinkwrap":false},"0.11.2-alpha.7":{"name":"@react-ssr/core","version":"0.11.2-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/polyfill":"7.7.0","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"18e70a620cabd2fb4c3ae77fd5a20f6f93de6635","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-JfjVxrtJ9L1ZcXtL/7god8PbwwaRrzRmgnYBstBXDXxU8yTMdOa4cUL2Ha6pZghWUjONPqlVzc0wXCtAPW1ntw==","shasum":"e64fa6a6d306eaab56595d315c84dfd8c73bc016","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.7.tgz","fileCount":19,"unpackedSize":44350,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXevCRA9TVsSAnZWagAA57gP/A6Or+XH8TXFNBKAiIiX\nZVGFibqo4pwh9h7niVfNZwb4zGhg2+AdzankOpIUdPBgUEgzO9rnVaptIStJ\nxtR+i5KlG5UKL658EiTrLSXVZDD3oxSO68vUe4lmObxKCd8iff+Yiebs0ATB\nCanshVkEFnDbYG4QFV6ORXsmdX8wUD8L95sNne3SzUq8Qsy5qyBjT9kCyGXR\nwGUo95/mwaBzRJ/NfBxFhP41VhZcVpCNo6yXhTk0gjeCNY3uJqRHXynhY79T\nAIjx7wIuY0a/SH1bUIorRiYRC43Qi6Ufhj9RcijGk7MmwfyJD0yDs337IHMQ\nPW9yAIIxm19peMj0VYA8XLVCBGph5Mi8LGK/s/pZ9MUidFTl4pryVHe5NAF3\n5YoIMptElZSYgYuzbJnPghWwTWTscM+gkijAJjQ2ycuD/1ufC9nN3nwX6NkR\n1DSniIDzZ96Bm6OLNu4N/qvjSDYln1gj+sdES4t8KnDP9sj3wLBNOFL+6+jy\nWZ3P9WOC4HAQ5dvtid54R5Hg78CPsGhsAQ7IhCFlpAS4/5R3jwlyl3PS0yyY\ntiC6O0a7wqtpLylAY9eOWEtAAS85A/xR+exyOk7ekIyk1uxf96lBue7qQrti\nGP7fdEIoNe8PYi2CDLKN93BIhu8/lhXlpOfLA8ZHg/L1Ns8+sKtLOyyHkSkQ\nr8CY\r\n=Xf68\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+bE5oB5yCGB8udGIeLTXOEpqgsbLk7kI65jCgVVFa4AiBHmy0f10Ge6yApUEms9JJ8owMqdUKJXnJ6oq+JRqI4Sw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.7_1573484462413_0.8964686748668391"},"_hasShrinkwrap":false},"0.11.2-alpha.8":{"name":"@react-ssr/core","version":"0.11.2-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/polyfill":"7.7.0","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e8b93f9e6a7a1ceca331745c27238b4a8e58aba4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-uawQwvpAr6ZpWVdUY0XjoAbaIb8nH+fxQ3dOBI3xpdVjyHGjHsOVkFquAKARTrCUsUe1N2DFsuwjHiVQ1OqUIQ==","shasum":"08da773fbd775be974fa3a308e0c28b2ab4e4694","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.8.tgz","fileCount":19,"unpackedSize":44410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXgXCRA9TVsSAnZWagAAnI4P/0CJQ9KTz/7P3wuC62U6\nbCQnMx/iYqaNb5rvdYrD2wQ6oygPqxk2UhzGVyXF2q3t9NmdCsVjz3yNVr+I\ntTTQwGPjdTkSDC3/T5HJdwLfEapY4Ha/ovS+0m/AeEnt8dMgKj/DtvF7S/uL\najQl1Cp9xW3gDKcZNR/AQq/MElUVNE3XklBtl+f+FFIUCQYwrzB2jcWCJZaD\nZ4lbUioiSYeKp3eqqCiFam9QgJ3bXzLFQVZG51aLEghgvCDm3lCxq9XXAU5u\n3Iu1gy20GKcIZ1el/3i0r4DTb310wvRLNMUyC5clsYB88zhzxmjDwmGLUu4G\nU8VZDGqUx3qXQLI0eSvR27ur07yj6Ds2shm1k6Cyt+2euY9RJnw1NIt/GKyi\nvp6My4l5ZXYyJNAXgsirbWevabnlvon4pKxklq25HP1obDPFSvno6NnhXc6n\nknpwdV68scdnxDbblxNOQh4cW+0EKpv6Kl/h8guWxkDRgV6zHsFmGsk39JW/\nJwixmQLKmy16//xkk7y/THz78Deniy4JRvK5yHT7KLxhHWgrEcqtC7Euk/4g\nS2Ol9mm32YXft5pK0cG6IKGwhL4Ed2Eyx3LlctCXG/PH9xrHrWmPB9zLoHGv\n6A/vJL6zauE3jAezn0WVGdhbDY7V4cc7aEgkEVdPPB1zNZxx6WVJ27t3k6XG\nDAxg\r\n=q1pO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJyOkebRX+1DO+ZQf2tnz1griomHK68f5KU0RI1HndTAiBldu/dR9YOkL0KxPfswZktx1IK2qbhrdV/tj5jYhoHzg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.8_1573484567518_0.6753450727071761"},"_hasShrinkwrap":false},"0.11.2-alpha.9":{"name":"@react-ssr/core","version":"0.11.2-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/polyfill":"7.7.0","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4b74ad3d1e1d964125c41704a0fd4a753d558c0a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.2-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+jPCpNbZDuadyQdCz4rmqB9nIPBRB0DZnjz/HsLnVY6BXPPyCPGtWjBqovV+avlSMPaP7ahluhLxGEOnG+R00w==","shasum":"146f46066770a765f18f61ab683225ce190e2471","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2-alpha.9.tgz","fileCount":19,"unpackedSize":44583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXi/CRA9TVsSAnZWagAAXOUP/32FywLJjXWV1DTgjrCA\nLx53DgNLvf4r2tTCz+UQAyBU1daAR3xUdjG8I69mvFiIli6+aDJjNTD+HnQn\nBQV8xY5XMKO2tFxMmn7T8X+q9fkir4k/LCZCWKnTYF8pokTLZfNMUb24Zwqo\nboL2gvfTnuygh7dUKj0huiBC0dz++wLC7Why6/geDSSQ4bxVpXkxCslLnoJH\nKffFH5UBBRz4aC+EkkJX8RoAYXSkDqfiYIZVsDPr0wgTH2sCB9LWC5Ohvrxp\nqt4jdtPLjo24yYcSP8AFgPAuPFfxiXl3t3+57KuY7UXZP5dl/QfMzWSyxMsV\ncuAaAPdw43oYmXcBS4meKJxf4lRjGSS2PCG6X1OGUA7UlpRP5sWWF4GR4pho\ndHujpmZ8SOs+lZXmqclAa9U9l4UPjCt10g5htPMMEzphEgrwpI3qf3MKEV3/\ny3Hg++4NSuMiqzXZZRjl343GUZHSf6ywu0iGUhJok/MBT9LM8Yu6sDItsYb0\nUjL9m3Y9N75CGBx2uc9yJUVXMJEN5xIJ76OFlGIFc+DSag3s+QM/VMvMr1l3\nv7iNSpotEy2hVgZ3LKoJ9iInVED0hlEEGWIjKXmLqF0FvQE2qJJlxOnOeFrV\nr9ydE0BkKEmZYL3HMcmJx/WhSqqiwk0VqYaTj+RgMT7Rvb5/Xt1VJlrptwvK\nF3Bu\r\n=IXcy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMm6RZJpOMWlp/558v/2m1rVzmLgH5qgC/Zjpj/h/eeAiEA+uT1Pdz+eOrd2MFxNG+WAMQI5+tvz2FhWbEAMKUBSck="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2-alpha.9_1573484735258_0.4329614444325931"},"_hasShrinkwrap":false},"0.11.2":{"name":"@react-ssr/core","version":"0.11.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"91db641515705a0a1ef0f036fd3bd102069efeaa","_id":"@react-ssr/core@0.11.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/c9WEkGs05A481YhXBqUIZmWm4uQlLXj7epJuycus4HeyN0nvFIGDU/BCX+71cZDjVcA1OfpWMfotO3+W6Fsyg==","shasum":"9fb6bf107d1678e158900264a0f54b7480cf151b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.2.tgz","fileCount":19,"unpackedSize":44101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXo1CRA9TVsSAnZWagAAbF8QAIyBPAo3HHOQ8RUubday\nt6U4Jqq9d32eX0Im6T7EwhCqjGtK7Ey/tHNFcwkuXScQvqz5KG1PjqeMTO4g\nGmxysqw6tj2rs7CwNh2IUb4+3D8LGiTirW9Gd3SPm4/QJak3DCIu//O2bFsq\nmeoqO/jvOZYFnSaEr2fBW802ZO73VlOTYUlGidPkB6QiPHrHHrWlDhoYplRn\nQijmHXXkqDlyU9pwvgLSOZseH895MqGo3r62Fw9YYc40AAoOjg92+Qe2Bf4h\nbx8NYxePueK0GfQNPR/0sPja4f/HV8zQrh4/++VF7d752vMVB3lMCHUxXwZj\nTTCUGBAuk03dC7omP6YeEuhS6TbuZwt3LhovRoUvaywTT57j4q65DGGOGQVy\nvvLqihKZ6sYIm4vtznJ1oVTdxLJzRrhVMbtEuek5GNBwkxNfHD+H1VWGehe1\nHuIv+PbaFHiXFi4c03U7/D7+lFE2EqYpsPL4hAeNseRcYy7wLD9K3r3G1Dq2\nm3VdJYI2XMzYygUspmZ+vVG2I1oSLL4y2CujndrwA0TSjhaIGODtZPanXr9u\n/CKm1uEzZ9S1NxHlhj+xnsz5FBTUSlnj6YQtBwV77kHfOHIx+Vzw9O3lfpyy\ng8m/FCdQ6nezdPNwpuYGDlu8dJKy/72zw9Lm4MZ+WK5Acd4oo0WaGhavwj1/\nE3N9\r\n=TSVk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXGfOpVwZUjfn44WbyQiBqbOZeBJ+3/6rksjRqjqNc7gIhAI6saG5BBq9Y0WrepVUOdMQxHjd2DEgPpYpE51TIsCTg"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.2_1573485109147_0.44740502630585954"},"_hasShrinkwrap":false},"0.11.3-alpha.0":{"name":"@react-ssr/core","version":"0.11.3-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"56b2e1e0891d964895de14eef6bf658df0ba2292","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-B1j1YQHWyyTsppq8qJWhv11vGSdwmf9qqrIKZ6p3wyx7DivRm8YqELVj3k2/pN3ueopvlasNu2BhbQC5WpR1HQ==","shasum":"57ed4f36d724f16a67d36c91bc4056ac01724f2a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.0.tgz","fileCount":19,"unpackedSize":44117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXsaCRA9TVsSAnZWagAAhcMP/2/gZRFx+KBPps1BND5Y\nkNXSHfMUoBEhd2XgUIrHXrNJKWWj82cKgrh/da1d0vf+4fHd9r4TPQXvA6Go\njcNz2+BgugRvpedDDL/1R9dSrlna+zfAZPi3urAhm0ty5yral5nWKWQc6TX2\n+bQQiYMnP5DEchlB029OZnY5z2vqFyStgqNloGGF4sIkg0UD4JukmOdyf806\nK6gazA6LeP7sw8QGbZEdqzTFqk1Zlusrx8yFQbNJvaZOqFiNYib29AEieOtb\nOJcosRMqBOzcJm6QB6kWgdIz3HGwg9lXQhsKqrVFh5wEjq/7sFgNcKBBdeV5\nuhjhRC5ek+bCQl2NSNy4WpFqTorBKRP/YNOykzzNnWwRD6/nMhyVA06LMLbE\nwqeN+qcjMX2v/WzCNWBHFCKnIGNHy7P3MXmk6bcvef42hIyXI0BRlkjhd28I\njV+kFxuM7O+cdNPLprIwwjDWsxvP5azqtW7hq1dadLFPmXBvnzlO9/Yk12pi\nqorpaYQ0kgF+eVp0u6wXQOrvjDDjY6xkcbcMkSmiRlnk+RyY+wB5ZvCvmZmn\nRBt/Nuanf7BGzWOZYMdNZzsBFzJUW361Z5umWUMCKzfpsNNzstjZUcA+gMKL\nxAvbyFRond+CrHDtJYgYkaS5bbw6Uwu1mhojPxMPSNoydIbLJGLpFbhgsVol\nPDvt\r\n=AeQK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZw6SKzJ7DwydZYJ1lC/ZvePq5fgWYytopP2+vCfSQuAiEA5/FuJFp/XTXsxRI7xuT65Jfh6ADo1+fxNMY9rKnPaHo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.0_1573485337687_0.1939008419211492"},"_hasShrinkwrap":false},"0.11.3-alpha.1":{"name":"@react-ssr/core","version":"0.11.3-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d2cad81786202a9070d3debf3985d680c01ca391","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.3/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ug36/C/TG6R/DjpGJa6LGB8EEqeGaRkKehw93FRzlQnjVkNC1TlLzg9dOjzxTZIYt1S4khrdxsHIxqblXrdGpw==","shasum":"75a5374f8dbd67b7ac478c49fd190c4400759313","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.1.tgz","fileCount":19,"unpackedSize":44148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXu3CRA9TVsSAnZWagAAWX0P/jU+OBdqCHS2WjFgu9e7\nIMIBcUnCOCvNwcoiitugQ/8c45FAsPeuqR0Ajwoqta/XvSPxjLQfJzxtJPhy\no0OCRy/tqxgPk7AYtlqK+yx27dKIV3wYOdr7SM05UU306JCHpuLpqFB7I1lM\nfvIcEuqCqbExUgMVLEBXjj04ej+gNbykTojaM/vSYBz5croodHhjEt9ex6m8\nuKsY2yMJHNbtiBS4RdGAnwzr950Dlf8/tQYmWCUbeCek8ouiwke+4dX4LZeM\ndFC7QqWIMc05Gu8qacUAcN0S9lqWGwayA7Knim7nMpl4y9xF10n3RE5pgcZx\nfcSERa5/hClnxn7QjisRevhc3FRPMGWzjGLkB2LYC0PVJUHhz+5P+zt0IIxp\nmT6RP9Dh5D2enl7krhe8ZJ0zchSw/mnmX4Y9vtUJfSxCUAewgM7RXRjq0yLn\nCVVUYxNo3V4cjBfwOABSvapcqRivh2A70B9SN/pYEjAxpbsUgOrP3mOmBYR1\nve0erH0hThKRxg5h4LAKEuLicaLVmTTwh+8sEh0/N5HMWfyIUhEn49A3dr42\ndk1mnGpXVDeAsxxnv1EYaG8cWgjRr4VY353Vf1GBCxKd5HLiwEd1rJawRnlw\nmu7WKTLELdm5wvGbkNVKDxMa+j5PjEfi+K0eYpotsrYJ+LVOQ9xz49lATkJF\nf6tn\r\n=1Tlw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs0Lzv0LP9KfCvLieGKKBIZYzZtIpX1dk16t3XNbRgLgIhAIrPb1GbQ3pd52YmrnX+LmkXMIB1ApX7q7HzCnoRgR+p"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.1_1573485495241_0.40886529968777974"},"_hasShrinkwrap":false},"0.11.3-alpha.2":{"name":"@react-ssr/core","version":"0.11.3-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"21f235adb0011dfc605335b8c1bc36b2c96c1ed4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5YidyXhyCq+3DXVYZgmqVUm7lxw3RpvrJ2j/ylNzFYfGTg/5Bd+8NGDhVanOLCl46oMpTaycCepq/6BfrrgZ2g==","shasum":"f943d14822f7d172e14a78c4d83b2bdd9f4bd24d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.2.tgz","fileCount":19,"unpackedSize":44148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXyHCRA9TVsSAnZWagAAtjEP/0lDVQzTTBk/EVjP4btx\nBticSgf93azv9XvufjgUdEpfWiuBflA23Wtm7la3UD6BuxrVCqT4B1y13j3s\ntaM82FR9hDQbjOmJZ17E/XySUVGuhQIzPuB7cy+AiTJGCC4QI98B177T8hOl\nDHTI/PSupWriqY577weLcbC/dOiMxiTG+nmn664PAi4zcqhP1m+4cVTkByeI\n5hI1qC9wWBU5BTd2pkuXq0IQtbsDvGomVGCUPkEPCxDeGMd/nhjNaZjL3RvS\nzbvbcNq9w5I3hsVqiyVblExR1vGjItWXmUr1NFsSjCNNZYFuspXsfo/nNtkB\nZgWnVpFFiKVc495HQgoVvd+4h5/CHRyuV7qMJd/tJIhg8xpuYYQq9wUYHPcD\nTWg+cRc1prvp1WNDGnu7QH5uoEqqsg2ex+KIhAoxd10tgDRhKzSE8vuFxpT+\nWzAV7NmNgJzg+tKg/6V3dfU6ANpPF2Xx3cLJXvU0Id5cFUDLA5hGIO/HybYM\nctDYjR1cutbVrW96CK7WLAQ4SFE0ebW+zmQOrNGCZdOGomxa/vYlD25zn3xi\nQvqGghAqvOMDJbwpP+sI/Mxqpk+K734WWi7nOwOFQactgZZWZ6clEqNGrYIm\nFmMC6D4T36aoDV/wIaX/2t/m9/Kg6C7bc3Ty/Ueckfe+wiDP691qh547kPqF\n4h3i\r\n=xDUd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBW+caCKRKn6VCs24zyW/I2dJOVF9U2gOzSS/4gMq1CBAiBEvQFuhiGdFrGVOgTKFyDvaUmYyJ5vjZQgxINyYn0qXw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.2_1573485702638_0.051391331063363355"},"_hasShrinkwrap":false},"0.11.3-alpha.3":{"name":"@react-ssr/core","version":"0.11.3-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"279d0986267c09c3374490067553a0da4833d324","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CW/T8R9/KfKHOs1wym4iyJdMh86iPbNYia6DwCTWkpfYusHsWZQLHoeyBbDUj1HzutlPweRTy0ngOiWhK+9f/w==","shasum":"96caf40191bec3cb8944f852ed4cd7a8aff8fb3b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.3.tgz","fileCount":19,"unpackedSize":44274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyYjcCRA9TVsSAnZWagAA2CcP/2rmFCurJkPTFtKK29OZ\nyLIbWWIJx4mhg5JL2EJSlpIfeQT9/YpkQFWiJiYfwYHXGvLLjgctqs0pPCuN\n56hn3BTb2dsgf73bgpimg2fq46g/zkj9C81zSrZApl3+gUm+8FKswc3wOqBm\nf1AKOL8OdX2N7koe/S0ZBDr+eut5MAZCmRbbNy/HLDdokzWVORyOc0Yv5lyo\ntHVGjmDyVlNBqup2bACOqTGNE7xsDWir+oQIrfEV6dX0uW4HIP/CJ2S5ujWg\n6Zi4jpvgmzR9zLhVqzcIgNXgU1pZuZLJ4swDTMMcrviNBVXFRJCzXm/uRYSs\nofscc3E6xBErvDQ9Gmy2TbO14k2XapHwhV6WS0SowzjtG2L6PvrZJUokvLTz\njbdGZD3ITiFOLCfv+AWbcGW1RF0Cvvn3aGtXFaoOHhCwYs62hNE/dcEFFWz2\nynvNhMw718l9oYcxCKOwc64iLnCgus5LcPbOME/0IgSGdz22T/goxvSi20Oy\npi7B3MXnAaitFAGv8mfM9Ev7ei1uJhK7FcBe5ZBP3kaaE176zyuqZVG7YbAG\nZhb374A67DgjeThMURK5yZpxV6IAuyW9meuD5mvzWPtROE0iHJgFZ8loUrhf\navqvYcAez2Bwl5nKGKD1dzD7BR1Dbvd+0OKz/rPZmlBWfyiLn7g6/Hz45rJN\nDlAg\r\n=hM7F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+oUFN0AQbGWGllnJFTODuOOJL1t8Tg9W0dikZuaZVrAiB6TjXM9ghR8/tpGPtdc/lbbHHA1UYoU9URgYR8gmC3MA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.3_1573488859464_0.35833632581818686"},"_hasShrinkwrap":false},"0.11.3-alpha.4":{"name":"@react-ssr/core","version":"0.11.3-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9f14f97c3330155742d7d76a735b906da37bdad8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LtpS9j4M/wThV0mMYQArPQXXgIXBCjVL6tw+k+gvRP9EEjj1JxIIr0/L2htEQMKIn66dPH7Iddmfy9JimAJ3Bw==","shasum":"9a0d213525b6ad2f79c829423c990bb41e6ac5ee","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.4.tgz","fileCount":19,"unpackedSize":43919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyYuKCRA9TVsSAnZWagAAig4P/2ccxJCC1JtHEZWw7P4z\nBc4jdE5pjbIsQIJwIRMyaK03j/GEqjBVfb1uOsBepHvK5pDXv9S1vXYp9bDx\nyoST/rH/KL5eqmkNBmljA+hGT0h7OCoziVGnvLuik2R7sn0/RoJcOGy1C09e\nft1zRj3aFq868VafNhnrlbn4qApFhqDXNQh9jGqd15D01YoouyBt1xRfBfQl\nGT+/xboC9g/YNaCEkUp6O0p3ZMJeRHEkIFkhYdIjHECe905iVVfocbt3k45G\n4NQ0C2PHschU/3JTmNETT/+JkcWywTlgcav2/8+MBJkyB1INrYPERHuiWb1V\nFPG6SuOFVkOShG7l7kNOjG/iR2PW1y8batiE8m7wm3O4TPLciY5pNhQX1gYD\nYvBCTIXx0OUGIPqXGo1EADJLwlsYXV1Khsbi0ms/8RbFQZ2qNuOO6ALtNr4E\nu9x6zqiVNW2eozUn6xFwWQNnZPpYHK2As+5W9ip9mhOPTbv81umTsuL48OoI\nKFZKpiCya0lHGlVeyhdtPy7VjXu8iTsEgMubPK+YqqB0TzHec9WN9sJ5Siza\ns1BJNg0GdSpf/pW6/KH2c+kX1Ed9MvV6GKBHxjT3hTeB8dMdtIIMxV70KPrc\nXQUCCo0nTBKkADq9jv1krZPF2PDL5E0gdVTkOD1y8vF5IEj1rKo/H90decK7\niRCE\r\n=RasT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1926gODBPw86WnEm8/C4DebFNsVJYlzlnmiNtJowZ5AIhAIma6K9IE/9kNGfA/ZEStS2dr9+ogvYix4CMDMsx0ClO"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.4_1573489545933_0.7890500325845464"},"_hasShrinkwrap":false},"0.11.3-alpha.5":{"name":"@react-ssr/core","version":"0.11.3-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"fb328fcd9d14d7f78c9e8bf6e610199ba02e0554","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+UOTb37J7UWRRE5Txk+XUPvUoTIAL04to9lLG+d8e5baEKQla//qE+vn3fUSDVJy9/DR9mTjb6iluau3wjjdhQ==","shasum":"1a33b1a5fc482135217315e20b6cec0e376617de","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.5.tgz","fileCount":19,"unpackedSize":43915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyeMcCRA9TVsSAnZWagAAdOwP/iiZY1DQVc5Bocrvg9Ms\ntAKVLISpr+GgEcqURVb962v8ApjMMqoRcFNfs0t60PYZAesvxhIkQ7syg7VI\nvKHMZGsV0xC0g3nq9fBLtlRa67gq+OpYHIQlqbkz0PQtQYCrfcU7N3kUguIl\ncD3YrEj6KHxxJXN26MgcrN6ClXUG0N1pkbltTdQQFkU72ftgL4DR2SOsSw3Z\nQBjThzBATXIsqDHvNEL05/qGJ3CjxYX3pP6+Amh0bOm3a96LLkBVr6x+7zI9\n0EQHC2jXSTOzg+Lliixdo+U+E6KMmbbznqYc036/MuFof3rIW3ehnWfo7DHH\nVNShcldDJijoe03kDEXEo5aZmuNguib/XwXPLaXAyf9SCPKYVkV7FtM5iilN\n15ztWwhBnfaf8o/tGJGUDZmUyYmv9LyOirwxmHtmsMXV5qrxP12Zq7lMvJZo\npYU+1eXggwy/+G+eALnuVrkZPaVBMBdbvCSSGF0hK9ZL8rUSojeJFVoORpDw\nxIKjHlQh0vfvkfLLrz+gJk6BKev2Hr/qoT6BFWvYuNuJbGGVA4YKtGVwiy5U\n3Z6+dV8CMKn75q3DM0+2Nda5fGClLBz0b2CF9I1zpwPdTA2UrdKosfA7jr2N\nyg+YzG4Knz5RQqBQRz/xRKqiLsv4yBYoTOgNd69dPAu/DpimbXzOyQEhe17F\nQGJr\r\n=FQ30\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgf1TK2/u4WNIZxmwkWH700NVFbVHN86bTqK0dMeKa2AIgBelZomSNPTkrB1giCWkNAMlE9QVBMXkROdul6EeaUWM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.5_1573511964358_0.6765269290553448"},"_hasShrinkwrap":false},"0.11.3-alpha.6":{"name":"@react-ssr/core","version":"0.11.3-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0ec18208170f9c7a6f14b9a80f7529c26ea8b8b5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-v0Cmqn6+0Ek3rc2ZPszdpTcyV/0AtB95bD/V7qgbTr3MKHvQhPnr/oT7SgyPDSQn1BQ/nneoN2BX0em1td2Tbw==","shasum":"13fa75fd2ba1595bce0b96c44ac6b848a07c7454","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.6.tgz","fileCount":19,"unpackedSize":42682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyePJCRA9TVsSAnZWagAAdbkQAKUl2/95nu5Mj24LY9UX\nmZrJMemF1q7zKQARYiSb4CAo+bkgsNX/n6cPWvxFhLkaMHTvG6DkaK+PkHch\nZZW/g69/wRnBUgvuR1Xwi8Xf+sazBVmjog1v0vKiEJxeidUQR5r48JBHho6Z\nC6nltbkLWMVEaAUbBIwuMy3chgjibOyE8JIej1Ux5NfdC3wcsvA7Qpo6Bml3\nhoFGlYwgAToNdlXK+3EG9A/JphfohF8HDjWeLXFlyWiNfmYAU8Qk+bw+SJ3X\n7qVWAYB48KrAjXK6d9/sJXc0VXnDJi40aLl2ra9MrXFy+wTcpAPaogv+Mn1y\nwhYqcAeD+HnxRb9zZ7K7A4HirHMPM8ewGpy9/+ucBwQDX4NQeOJebSoTcO12\n47MwUd8IFIdEZKeJYgMQatY3OWIwUOfafZdj6ygO/GVK0q4gRedhUghGVmMO\nn22mG9XSv4AjP9qbDDOf+CgtDrCYdrusE4Egv42wG3E9tYsEvW9ZtXQPBD/C\nIrsyZw3/6Nh40LFS93Hvi6FFXUezdGwrIrGM0jvkNf4YA2UnsQnyJv94vz5O\nQOQkb5ysy+AOTeGh6E8C1qBhNrkl525500oVLSWXUTLql99qPx4BiDuQ3ii9\n5hIR7tsQY6j5jcW8Cl82wK3/aDyDlv+MOKDvzEot7KosiyQKBQVYzppDtEJ1\nfqX5\r\n=qWC5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFKr7vUNHXATvOamnk+ohS0W1IXHaXri+a6yLJnWV3SwIgHVuyla2ktgiudvH+9AzVJdXerW0tNFO8U9d/QW5d42s="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.6_1573512137348_0.22068319505342737"},"_hasShrinkwrap":false},"0.11.3-alpha.7":{"name":"@react-ssr/core","version":"0.11.3-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0c196c299b1aca3d5fda651ba5d2ffc76adf2833","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-c3FwIo4tBpys36hGMZD7/7ICyU1X3dYSw0VFuqp3mEFzudDiPu35AMbMObhGBo4kNUA2nv7Vt4A9/ssLeHkMvA==","shasum":"f1b45620772c4970fbbf281d2ac784c132597e3b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.7.tgz","fileCount":19,"unpackedSize":43919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyebECRA9TVsSAnZWagAA5coP+gJtYDrqKKNeWCLaubWR\nzBQUshCkU7tnOLWvrRywc91zwuMffWIgKo4pWTxAYk/RC16FkqPE3wg7BWPk\nWhyAwF9RVCWqWF7NhkQG6ihYHPOA2LvqJBTwG8U8vDtGACZbf8rovs/eqw3r\nGanZ0XDSWgkMfAcf/XCRm8YmMeCs67k6+m8+XKjfQVnh/qb0HzIt3JrARO7R\n3UPE+GI2wHA9SaHkKrMTkS3rt2w/14ApssL3SFk8rFV+029y9GWyN79PyJ/W\no7Ee3C/kV/hbuVUS7t9WOh0fKUuQO7NwjJstHSc+ObmMbe9A3g/7fNoSk46+\nlATmPqSCijjiixxil/jLx+KnPaLwxQEHSQ9Wf8YKZ44UE00bGaDn1nPHyCKo\nLk8yEfTbYPGHKBazSdMbOoNJZ8gTXVMSWJgP93IyHgIbbToEa4QZIR6u49sJ\nbue4qpB3pAqlf2Ap6h/xT5sO1W3ZbVq3KK6WbN6vjus9M12ByXgccmbEC/Nd\n+VvL2Q/2elFG0RWIXLVd2/Pu5feg3/z4dQhTdSV7/xzKl6VzQgzOU/jys2Q+\nTuve0W+Wh2+M1L2nTyIAu5Ad04bcZccFp0V4F6cUgIWxl0SHpd4rUAet+WN1\n9N2L7y7mNv3pVgdQmpjvtX8X2m30yAZR0jQik5N2v2RkNDEXHJsnDYmRqrDZ\nv4Hl\r\n=z6lS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxYUbRsSlrrU6U6FufhvMkW2GRxRW+fqzfQiIlGy4GeAIgCQcnsSMK0YllyjRV3kPc99n6lmeXBkIRbFQEZjXZFfk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.7_1573512899827_0.6902865858056453"},"_hasShrinkwrap":false},"0.11.3-alpha.8":{"name":"@react-ssr/core","version":"0.11.3-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3331f3dc017b4b505636933a687091070511526f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-iiga56rxsQ6pN4oM56IzwYgkyzfmaS7aGnAji2VIZOHIwdZPZzgNtIP2uOLWW4QQ/QlrVA484x3uERYA7oV/iQ==","shasum":"7171580ae31386d8dad1d184d91d320b4464f6b8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.8.tgz","fileCount":19,"unpackedSize":43899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyeepCRA9TVsSAnZWagAAH68QAKI9Cka+6Yr2Du5btZ4j\nzBrBwJJF1YIFthSv1gh8onaPo06sPrBC+iBSOYZEPmtfw6xToMDi71yrfAe2\nx0zsvAezx0CBAIf1JDQve6UuZXylEzBdJZBPap6i5GHvZ7ZTx5w9U2FZFUOj\nm5tPVwKAF4JqOx8Bgg7GQv313s+2ptvV7dOPKTjr0quw21J0QLafZgpl1GWF\nBv9OvLEULuz4uWOExIGO1hi/6I3k2Tx8UEUYDuZC9tN4Ws4WQ1C3wKXH/fuu\naQ2ExQ51zVSyh0FK87aAjFjrJEhbPTIri6Xgswj6uf66WMwune7W89SBXULm\n37DgnOlRpLAsfNC0h6xMt3Yi6Ua2zDwYTo1Xejr2Nu7sVX/kZyrAhGDLNICZ\nbTsZ1csWSs8dWGHij8TOmJEFQG1QOoLSsl3JBZ07ckkDa/GBCqI+kU5SSWpR\npF7qcv6QgzGq42uoqhIW1Bi4L+8MgMacTmgJ3xKzTE1NjIaNSOD/cl3w8RmW\na+hNZI9iJOdhMBTDf0P/XRWdCbTkzv5gIcA+NNia9lxKpDwXb5+V9G0veVIu\n6JoWxOkusU591ucaZRHN4Fp/vaYB9ZFlz7yOhfpiIEA40LkuNjjF9mYo3nrI\nDti+3sneWG8orgfpEbupRBpiYzeszzDUr9vYC4iJ5OosNruWiNzB1W0Oq1G2\nrSrc\r\n=J4dz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICCv4xLmO9E0Jjd/8REvTZWGCQHL2rCpbWOesXR+J/EFAiEAip03zdw6/WX3SvBebxie2n/IOUTufUiDT2mdvOipRpc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.8_1573513129205_0.2042146466756949"},"_hasShrinkwrap":false},"0.11.3-alpha.9":{"name":"@react-ssr/core","version":"0.11.3-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"25aa25552c4c1351e808d44762a5c6e823c6c587","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NufZxNil9/ZzpQEzZmoJIFPM0kY221JfTUyI1z4jEtRe+gBv+zodkT6JjMkXLsU1KYFLoLEFFlfIcbudyIWlXw==","shasum":"7552c4dbefd818ba96559ab00b3f6a2b4af3ac20","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.9.tgz","fileCount":19,"unpackedSize":43948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyetkCRA9TVsSAnZWagAAQH4P/0RdAEDlRxSEUdXnZvN4\n/oEvXJTsQpCTrALRp2C2pqTh76NY/f4fWOeetYmvrln6eMEdGFN2gstjY+sG\nv0v2p+fLyfXH10JfBXdCfqc5IkLTj4qbcvIeMr/jBXdfDi9dDltcTPCfHa9c\nQgHA40tey5IPu6j14Oi8bVxOFa2MciBoGelQb+KR2EurHV8szjvyd225KfuK\nWakEujxftl4GBgZaQUVhuVbRv93JhoGj/CelS4wWvN65BmWae3lYmmniV8Vg\nIpDmPfe4eGpEoiZhgzJzKqwisQ8evAQBuMVZON6fYG5wBE/8Oy31yYC7wEXS\nNHj3sYm9BKoLaSd9hd/39JB00uoz3AQLuIUMl3r0r+JTeahWWKWURrgxgGtP\nOFJNay44fNAvQ8thuBgPiCaEotAyV3HoxpGf53QQJCGGDz9IUMDksTQTqlob\naWIQZ2yDvNaS+b2bXKnNiw8HwpIMgUeM07iIRIBbd9HQX1OQnRkf0NmZpVNd\nqO/NaNCVgwyz/bBQTJH3c1Hnmijrle2PLhAeBmDkdYbL1Vvcqhj//wpDmUzC\nJajZU/Zo8cYlW2KFWcf7vOt5uTA5tXWUd2XhvOynSDPM8cBjA0hzGd8ELydS\nY1jCvm6fXa+4kvzX0AeObsDjChyGo4uHcWvI2L2/ebxgETJIdvoyAu7y9Oe9\nhkZ9\r\n=r8ud\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEUBjnfH14ixSUtOFyqhO6EcdslfQ1tK9UnUmbu80r6mAiBa0YUzzeUvapAVFYdTTci8fNadAyq2fa+WHsPFPoVR1w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.9_1573514083791_0.12784905600690566"},"_hasShrinkwrap":false},"0.11.3-alpha.10":{"name":"@react-ssr/core","version":"0.11.3-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"54f484fa3982a1c9e378029eae0d6d9e7b583e84","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-E/dYGZLe0IsVeMzAJXCYy82rlZIIgxN6pD5dB+NoTKgMGaHitdzKU7hhVB9ztFxEPGtM36p2whFy7WIblix4SQ==","shasum":"2eaacfe7cd683b4339ab4b9ec68ef1834c8d7a3a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.10.tgz","fileCount":19,"unpackedSize":43946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyex2CRA9TVsSAnZWagAAWYwP/jYImfVtdzUyo58vUH6E\nIzGvIvSBzsISQzJO1V3WTfyVQPr7aeopt8GWdeV6mTTSk7AA7A2gsyW3aST0\nc1TGowQpjNAyz+dMk1wwwE/EWoHVtBJgdEVda2VAjnPtD9MijfF0waBS84Ox\n2de4QMMXRWnLrO9UQOddcO8KDcTtATzQVAjejIKlnfwPMIyjqjnGvmz6KD38\nAsXk9ywhZgytRTWsRy7qJGvVSf+5nuO02pIYvt5utUPilUogaU/SPYGDqs8P\n5IauNie4vPlmq60LIzut0tgHsvcWPy+yzVyOogxVhUQDKrqwJ2kYXgeXK0YU\n+6IPCRCsB1xMuVNWZvLs7BQelBFuyWfZ3JLpFJ9l/oCFAJGnVr1o4CqM1YfZ\nRyAqy4HJznCDgRZqG9FxaPDVEbGaaomTw+wZcHfcXf6b59mfBAqfuZkQuPe2\nrKjuv5eEq4MKoD0/uzAs/rywBWaefvTV8Q1DCgyrJyKLTl5ETZcbMH2bJ7hW\nYU1NpqFGAXHiPjj4itqe/P//J7ZuzCQ+gO6bc4hZ1j4Xsi76LT8SZ/Q3aeqQ\nUx2kw2KFVCpgWsmT0vPAtaIke8b0VaszwG3ROTgt8RGOZQ40IRjl/j8DIxeA\ndDkBvXY8vVB/lx/cGHc5LD4vE2MRTR9bJSz8BSJreG9MFErJVJFMB1y5RCP4\n4LEG\r\n=FuNV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwdkYzGqeXDQrPqzs0zU3V8z47yzD3CWK3/3rj2q/T5gIgZsgXq1PAJnf93odJeMXes0N0RsVkkfebezUNGakgvrc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.10_1573514357896_0.7392810278260682"},"_hasShrinkwrap":false},"0.11.3-alpha.11":{"name":"@react-ssr/core","version":"0.11.3-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5ff69457c41a076ac6df6f0c9730e1ed7d91afbf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-327r8Fh3gPXBD/+NIJjRciAoNimdTuxrIEbtlIbmOaROAjbxEMrRcQgTDZTw//ZhEBvwBZyEtZ9ACTmuRlwxlw==","shasum":"e84950fb1f0c65c3f17c1dfecfc4f4ab10bd01ec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.11.tgz","fileCount":19,"unpackedSize":43953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdye0HCRA9TVsSAnZWagAAox8P/2kvbaS/1rTXyD36Ye6U\nSOk1GHVMtsuWjn+wyYJ+kA8jN9jva6jxWcaoBqzCHovDJt2HD6ImnLEOH993\npM7bgsFJwT0N0YPYN3O0DGqnMd94lSDJRPkvwUH/M1KWvtI5/nJ0lcOohA0/\n1QGVMZxYxPuMTvD1eH4WH3WKNyHlya3R/mf0NVGpqE9aace0ng8W0vDm3L5C\nEgENqMnhZPHNZT2RnzWTF38JSEhcNQwvUcZW6DUbzzgISjZNjs1o4qpUy/Qt\ngUjCimW3TW8nsWm/ft2JkjI36Qj0KHTvF6LWcSS8662YOOiA0jjfBkIBrXhU\n8k9ixVd4ZpeXwGBwR34LWGbzv8cvRAOegkFsbJVAOrXGId//5zlkkzYSdRg6\nwbUEpnh0Pys3sLL9zsUCZ0AkE2Awm45V9AwcFd3YiVrg9ErMzwmDAn3/bINr\nV89BospdKPdbrfYloZdmP4LOM6hsu8B5hmuAThh3I5aUYurGhbFkjfbMdjyw\nLtWCYrRHBg7St2IZC8BX0lF+QHPz1on2plEH8jWjn8eJwnKMMw1RvdxU6v5u\n83B666qUaqoSlSZ+CI2IOOA3lHuS/a6d+pV4O0Bd2h+O6SvAEJtYLZtksO34\nKcswL/XgicMC6V7en0xkErsr/9imrKJ6fKgu0Kp9D3ejHDFZd0882IMCtLES\no766\r\n=vhIu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDySbhRtULdupvUsawTlro5h0uTEgV4fKkW7nnda4AHAiBuD2RKee3li3i5rhjWl9hlxsHqqtB0sOI2nqDZE81cxg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.11_1573514503141_0.8271189230349865"},"_hasShrinkwrap":false},"0.11.3-alpha.12":{"name":"@react-ssr/core","version":"0.11.3-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a2af0d1d5b443a5ee92c64ff0f869a86e11ab512","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-OFc/1gcbqHF3oqW5deQgLzL0tIF9oRbKjokEig0ba5E5djWm4+Lwv2RB5vfhRoBQT/W+FW/muc/sxL1z0jjS5Q==","shasum":"9caf558b8612e591472b59d95eae390a72ffd85b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.12.tgz","fileCount":19,"unpackedSize":43849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdye2ACRA9TVsSAnZWagAA7p4P/3wmlUIvC9ETVd2OXgAU\nr/+IA0+XM/QtFeokhbE0NMFf56MdEqhhZK52OJmXsUH8BASdsX8CbAmheYxf\nRsFmgQLX+7avYAYKRdnaHfqM3bPTBSpoa5RtRaPLlOfEmiUmayI64boDyShJ\nuU9a5SJ18Bf0D+aMBeuUcqkWGbcl64fy4z3EaMBaGlpI9QzTaHaPEvGts8Ex\n3s4EM0+/ZenbiktGvp3hIesSrIkH2gi9Hs3GXlCuHD5qMEnz7KJVuqE6rJzB\nkDoKmi2D1oq4qQn5AB+TlEa+oGniZoNd8NKdCNFH0tGnlxYuL5EoY5tzSaKk\nJXqzMyVcC6Tn+z3McX1r8kAzDqcAC48cmCiWMe92xC4f8Hr5e1vJGfBHPHwI\nahSboVG4WzEhnG47u4k1mrYp2EkscARPwyOh9JkLc2swSCZEQqMzcP8Juw5H\nNYqL9j4o18VLlPFOkFQXzuACWffoC9+uvmR3yoe4+QV0xFe9dAnjhjo52R3o\nrAgFWzK7YNS4rra1+HCW0c+UK1FnUs0CHyKPbdeeHz/XICeoaePK+ZSmfYpt\nBQqGx0vHnZo3RkQsktk1ulzopM59C+5N8Rq+z+IOBPOVWwA3F3W9Yp0qXn4g\nMT7L8O5N78ggMnsZUlJhij4za9N9K3rRJiGRptdUsjGoBABSl4OTb1ldwqpQ\nKcka\r\n=JjFT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDs/IF5l1KDCsWaW6rusJchWteQofc4ECNFl3mx3P4AzAIhAOp3xXXvHKRzhUp8bt7Umfm2CRB2UZLdDvjOQj6pLZSX"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.12_1573514623611_0.4438497877329701"},"_hasShrinkwrap":false},"0.11.3-alpha.13":{"name":"@react-ssr/core","version":"0.11.3-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"41be6b8153cd833c7c112ae42c496d3b768ec525","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-83jI+ez9w4jwcb/wTdpQb4QjrXle0N4xdIcuaffUtkkndAidXmCApFPMoN7Xe0e1aWik7TdJYQH4wi7FSJ/qdw==","shasum":"636cc5562d7720631132167a8c2bf618be44b6b5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.13.tgz","fileCount":19,"unpackedSize":43841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdye/OCRA9TVsSAnZWagAAINcP/0VuAQ2nWrwYUJPqR1rL\nkpafST1uCnpAJqsGRkCyef9SGuLpFOyMvR5FtbAMrPqNO6mcFCWw8ORAFGHx\n4xW575sUw9zj7I4Bt3Fp4FW4l0oh349y7jJxWfoE6L06Hiwy5Hz1bsCBzEAU\nANnALL9uRiL8Y0dxbwuF1V41wPrLUGoffMuMgbz8UPbw6ewP+kULyU2ipi3k\nRVn3pz+WIVlFI5gp4sWTrFg/gN0xXNia/SU/TgivTQrR0cqw1zSfpjRV3RL1\noGR0pCQ/QUG54hBUOntGYsd6yh8rxV3IdEUDqf2PyKvKRYkKSN6gxmF4JeLm\n/4702LLc5PnZB6VbF5VZNe5jZxGzViQHgpqYQYQWlx5i1C+KCD0Wp3G35CfG\nmGWNy1OwwkJPY4LMu4C6zxnoa+bEc2gJUKN244ki/8wWP6iBJD01WvgN13UX\n9DwBicwBWlnTvsK6ZNlO3bPCXd1Wucmah0r7FCGpsTSRipL6GPNzLAp8NGuf\nGkSLVdI0GNluvnoAbBgNVeozRKJSJuI6Al8PFr05V5F5Ysy+ClYwI5Y2Jn4J\npJdASua7eaIMeCqqHRDJE2BUF0mTcJ2xQYOuNNmdPDBXYvx58/UZS+fUP67H\n7O0NcVg4XnxO3lVQtVUZLGNxpJ7qyJzjzlHUXnMnESlJyxODs1+F7n5Ve6jW\noORQ\r\n=ZfVY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDqudelKRd2zb5b7eaJsKGNSzFgLwz1WqQv/912oKYXAiB2CbJsNpM4qLLTA9g6gz+UlYITs/49ZxYO/+I5oLWCdw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.13_1573515213549_0.7639338292132609"},"_hasShrinkwrap":false},"0.11.3-alpha.14":{"name":"@react-ssr/core","version":"0.11.3-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"58f5d197b7678c255118d1f537bf34ad865b6137","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-L1GAIBiEdACIicB9oOSFBHgOvlkSbVWfLpLA0FjIAvihb2NVTYSxHEbomWmz1kvg1sssk72oUL/zudV1A5iSkA==","shasum":"9ef7b5513b1f8c36ec749358ec4f9d5d6928ecad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.14.tgz","fileCount":19,"unpackedSize":43845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfAcCRA9TVsSAnZWagAAWgkP/jPqy55H0qvxV4FVpTrU\nPWJXAvNBv7uEbivtByLgUBXwiCVmkCIkXFEHLNgWyhrLiimSpQNpvdFjR6cq\nwm8o9Fy2arIKkRYgV8s8Q1Vx2eCsZEfVT//Zgz9N5x+wLwi3PjsA1L7QFw5x\nOI0v9TDNPoZuv8LRUMK8TFppZUieMiXWyo5BUk+fqH1Ydcj6Mqhgo28uk2Dd\nE8fqycOrOxL4WnXfArBKkUEAFZ1k2C4VxFMX2xf53S17VRNTtWYJtwSW1xIg\nzgUI6hWtbFSgpdJjdf0kCkc+EzWPytsaMjkKunfcJ/K/+x4mHD5kciAHdd62\nnbt9CgE80uop6OfAry8Kn9zUkpK8XVXiTQRi+q/LxTd1OdAg9dicYnLO2Lyo\n3egIDoWpSTOr1+/qMq92pL7EZQ0xpcOrikACjlRTvsQgltcdIdSt8CTTri+2\nSAMZQXv8iA/Nyx3DKLmYkBnVvLFoBYLY3VJ1IfaUfILyqguXDgNBuYYeMMbb\nUoJwazQlMUkyqN7lFBfEiCnAjKKVXLaNVWKRmQfeyvUKY2ruvOBDTaGikxvg\n4c8qWA2whGeBBUCq746dGrd7nILMwLhrvlFLQIk3u/3y/rMghYjgpBZAWX8r\n2MsRO4RD6ex+RYhHXLUzs2QaTcCxOCzyMdAH0tgzltpJEhn5kHwWHae3FdqZ\nGSMp\r\n=ZsB+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGs/HQjYiFvGTdBQ3nNIp+yaK99d/OjtcBX8lLmKvhYRAiEAsMrqU3Hi+4VTyz00Ztm47r2lfq6EFvSKc5akNfmSvOE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.14_1573515292200_0.3702207928121042"},"_hasShrinkwrap":false},"0.11.3-alpha.15":{"name":"@react-ssr/core","version":"0.11.3-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"25b63adc3d617cd4153ee7cf4d97d8e4326f9049","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-u4fd1UzpxS0bjX+51XN/jS6utz5KccuebORv/drWGAWHa/YlTdmd+iD1UyVeNWUNoC888lSayJ+RaLx4fOkAbw==","shasum":"034a1d3ef316dd3d63842fef5532f773b20abf23","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.15.tgz","fileCount":19,"unpackedSize":43860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfCyCRA9TVsSAnZWagAAF3UQAJX7OhAN2yEcCh6eY1zx\nfNWFocroyalpsy9XJFU0Sr7o2lA44j9EJxvA5YfLxoAZrSf+EbJ49uZXh+Ck\nu4iiomMfgrlhZRrvUReBDQTtuI1cElYghjyIJgaBBSYyfqnjI/nfvs1oSE1M\nJK1B9WN5++Bn2Kl7OYsI6JkpYuu4KOnA5plDBX09qrVUh8Qwd8Qfu1KftAmW\n4Kf3oRJSv6NKcKvbFJ39f9ITDOuHjbAyOAgr2w/WbZbhYyIWjXHjULpqQ6od\nkmqLlElDi5HZ3nSeC0uebd15SqDEjBUhJAxagGD8prc0xyg00hRCpjDYydVM\nHzJA5uxdzNJU/ap6C0MdfFb8AwHEEG/Znk+oFH9bCQqPqc3eMo6AF2HBD3hb\nsu1N2SjofYkdTlu7NlE1iG/XYHU1ImcQuNuerfgd1emtk3DuIoGu1m2CbOyJ\nq7rvWX5wKb5Lo2x43RifYdzZIIvnir6tQj19s1pHu5M8/oOoWk5MOpqhgkzU\n9YopvcfVMBdB00CceNaAMl5wFMsGAKQXBGLi0OGlap8AErwsEowNSkyHHY57\nCPaPr+HW//yPbVsBPsaUclLIkQL91r0LOtgMeUZPlon4DZgFXnXNO12jVavI\nOvAU3LpC3hh7HRvETMwT7VNcAkWvVMDfQJxwt2UopdQa4hpY1DFI8JQIql4N\nMfnZ\r\n=RvVI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmnAXrJjPjq049HOvPmec66XqIVD5KILftv/RcwBruyAIge+h1IHdxwttxCQc8oPx9phu+uL3qo3hV1BGu25hk7E0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.15_1573515441717_0.7184098044063565"},"_hasShrinkwrap":false},"0.11.3-alpha.16":{"name":"@react-ssr/core","version":"0.11.3-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9311ef733a352e17d4493926f9d0b795aefd6da2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-UqlfYd2EaF2J7fh183iQU17JmRrU0Rc/Zl79CopjNG3ufqX+/+O746aS4EO+8Z0Pty7cKmQE4UZmlzevsGxM0Q==","shasum":"8f28b7d6003a7c1993ab0754abe3ec91428b10ce","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.16.tgz","fileCount":19,"unpackedSize":43842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfDzCRA9TVsSAnZWagAAv8gP/0wbIg9WUzZ5JOzM33hP\nfyo7dOunhAgJ3oqZ2XveFUCcbYcdDgmyTeqR4dgEYxsYsmoEq9WqaXrJ2pDb\njBbn7JYgdoeF/veLNcrO0Bo8+fX9QbKmSBEYthh1rWHlLqAKKRjVB+CanByH\nn2Sce+9+veoldQj14uAb3V2HG0StJ2wd5Ly46ImuY2VrkKKflTMbvaoXQFLZ\nUhi8t0MPmXNeXvDl7AkbWm5QBshZH/rip4c28synX29osYdC6GruKaMKQWZS\n/TTmFWImlVJN1408GLq0kFxciieQjSRDFGavKgx6WulZurl02BV0PCWQzo76\nv83oa6UlW2GwCUawkRxYsGcsiAllAgPjfSvxy3Bem1zO1+JyBTnS8X2DPbpC\nmk2Ki/vY46xaoKHzV/fitPTognR73x0jAzvCtvuj1dVi2JKD2GzeYXkNg0cR\n7cEhsBsUjvgvJxOReqjhw2+OauLcgbDMlVxLylqk3sTDSc6ks/6r1f60nGSx\nd9G1Tvxo69DlShSOyapuZQK//APQqRYEd5Klltv+BpCY8HEPR0He1+oIdi0c\n/79VyVYVsTmyir8T+vda6GbdVDagqjkHa58PYZlL4+Lp+bJuYJPaskL9CLWA\nRJiZ0KNYiSS4OLjwORz4nTFs0j0DIuUKEcPFzbLPD0df9o/jahW2CPzQoM7V\n4uMn\r\n=JxZp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/vZdf7wMcce7bSRe03Zu5vTOfduG9LkOo3F0YCb19XAiEA9DJKehuOHcEiLLtigx/6Xe77JdAfaI/9AwGoH46tchA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.16_1573515506718_0.7267617162620938"},"_hasShrinkwrap":false},"0.11.3-alpha.17":{"name":"@react-ssr/core","version":"0.11.3-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d68de6022d69ed5f3beb0b60eeb9b1c941009f2e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hOGtiStQEuvHohqKLgEKWUj2xr1meHb2eh+oPrAR9Gbmh+bl9MOK/yMVFRZKnAKNlWctxZ3+KRQ7tIiU8xdUiw==","shasum":"ec18c0518dd44cab255a35b5b04c3c5f5889caad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.17.tgz","fileCount":19,"unpackedSize":43768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfHvCRA9TVsSAnZWagAAu7gP/1w4AGCCkOI36J1z2NID\nQh6M0arp+ybi2McHYa/4CyJ9fHLhsuNnJIy6k2xQaVZckPU7NrBXwyAvheRo\n2uu/5VHW+6rtDoNQVM3cO0wagezr0xLCWQR0q9iSAe8zX4/7EGJpsiPWdL1t\n9yKoYzo28glljx7jLltYwua7moEyiXBxVXZAiaOlFaljUnQ2L7bPkWsU0wyE\nhu4+8xLXTR/sJn9tdimeL/NJqhKgQ8vtnQmYoFin3+EAejrk9Y3HzcDzeudQ\nDq668u56ajQhX+1hERyU5a3PeU/LmNEJXS/25/s+1GltKkY2WetVU4RlURXW\niRn1Bi43Wxwsh4NDi6aJ55F5WL3IcCzYhnslhUJXN7Sk9CszlmYrkBD7m1uH\noWLuZRQCXPkOnniSa0a2FiDmmz7ecnSw6fag47JvZ0GIpDJgQzyvj/BmqL4u\n5kq8DCzKsuOx+/7LA8G9OwbOSQoGkpW+KlW6/87oMV1H8WXSZV3v2xJcJ093\n+WklMVry4YkZYarJCGn4KOhSUpM/SKuX+oDkXnSBi+Qqvq5XoNqcXYUtSgdV\nShsvkOZcOTU1w6HrWia2Th2bZrjciJoZ3s/ZvxgssDYE6pgifoXuOixTH5Nh\nSOpw7UN7hJ7hX8iXBiCpnrFVLzK3sqg9AwOSkyYWoJCT0KeeIc+l2PU1HL59\nPzOk\r\n=ewrj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2+XlV+WEthrOFJY6CHI2kShB/t4ty6szbDEzuM90aLgIgGrfbqdy52qwc7o9ZlSAumBga8iV09rqHQcEs6PxbDR4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.17_1573515758588_0.3534067114030688"},"_hasShrinkwrap":false},"0.11.3-alpha.18":{"name":"@react-ssr/core","version":"0.11.3-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3b82301f91b4bdddb42054d6f50e05f7be07aacf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-rOROeOs3zn4EKaVRyYxgMk2xNarCRYzOtboqSiyxzgkXwBWByCkh+K0TW4giw+tQ7xCSNfghpEjhDb562VEpvg==","shasum":"9c0be90acf2cc2a1c60f239caa7498e85f3a1e8d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.18.tgz","fileCount":19,"unpackedSize":43767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfJOCRA9TVsSAnZWagAABxkP/RxsQ5ICLvQwcahVjru3\nTppbJl6/Wc+KGZgtXfyvr5zkDppz4LLxvU6Q8KtW1Dx9PjTHJ8QulEXAO1Ma\ncywF0ILUfvQLC3TrX09R1qaKRjrwXfDTL3tP8gmTYGPQzdsqVwv3CwsT0vTj\n5BrEspSGOnNYFTVHNwIlqaWIfPhzQ1JpLh03r+tla2qOy9YI/xO9HFbPe4HZ\nznjv1O6WCy2l9NCCknGdvw4qGMxADP85hDmjki0sSC9TdoZmGPTQpy2En++I\nBPoysvjh87lua/U4FX8PTXPBjsxx2mPteyHt9v5ZbY231A6pAKu//Ii6graJ\njU5bRv8AsfVUVrvdSBuhYqb6zEqx1y0IW1R/MMZMhQWkhucyueQWNHW9bjNu\nwia/l//nUuOpWVrtRa4n7rLKm+HnKvIuq5ECxDya5bbKwFEA5GPqeWpoAamc\nOWlXbWh74n+3rga1YRZHBNfhpTxxqIJzo9dR7rznOaD5tNbnIAXijPgFE8H4\ncYXYI5cP3FUD8W03eJg4HuVattu4cRW9mstnz1A21VduwQgP0hix7Kxmxk0R\nSdXWkUmSmXO8p0FpgWmmZ8fg151gzv+GAc/21kfsNjRalYGxM+7iy0j5GCFY\nO6YQpx8bX6XLBNg+DcLoU9Vp3RIcVOS8DRQH7oEmxy+S/MvVj4Wh0/DKiJgW\n0XDg\r\n=Gokn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtPdP3hgetokLDhrJ8SyneyuzKtYWsihA3RjvXzDU+JAiEA7kVz8BfQrxo+GpIH1oX/MEbRKtS0GeyGDgdt1WV1iJw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.18_1573515854075_0.37933714062137613"},"_hasShrinkwrap":false},"0.11.3-alpha.19":{"name":"@react-ssr/core","version":"0.11.3-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c3cc3985d8c8b3f9142ee36d262e3d6416592528","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-KK40qyM3KbYfwFJBR1KQNHwp1jq98Ebpw0yZNcByxSS/CpNmDAcYkQ104EevoOW/N0/407wIJx+ZmNMdciwJqw==","shasum":"abb30c77657c7e26f043b2ccb110a634e964d5ee","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.19.tgz","fileCount":19,"unpackedSize":43805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfLACRA9TVsSAnZWagAAX7sQAJVxIIYSQP7oPj8QhS/z\ncD1yedxy20YNffOBA3Zvz/eYRrtFlT3IM7RZsLk5JOl6M3ebdJvUGrgmEuPx\nb7csa/3ldRMCccioa2HxdMohTeAtR9638NydarGKsCPy/rZZQU2eLXmuYXhX\nSUyUmE/kASj8ZbPfA6Xh1WVyDjnzAQXKSTsK5J4VhD/mvFQvQ5DLR4PTP28l\n9w1Zpe9n0CUAaURwRVWwMpKXLEaapy4aqFUwL3iom0JA0sOOmuh548U6Wu8x\nXC4ycCWbAKC/FHEHGZozEUMgY8ADsi7ew8FSjTqiGio4duXF13dWB4Rqinm/\nqMf36Ui6qgwv2xrGj681oluP1f9LXhVfvswXjWtHLDmSvVlmg4W/YYqiTb2u\nSSvgM/Sfw4z0inSHh9bSrzRkPc+KhFL7ch7I+pzdh4rZvhfXkBbiOzYjvdsA\nUccD7D/VxX2rop4nrZOvysB8XmpRzgPYiR/DghPEnOC1xWO6wjaacAvqeR+j\nCuLWd9ps6F/U+KCKRyOQgK+9p4rtvGZKu7U8u67r5HwhxqdnzHMtwxFMCb8X\na6jmMZtD0rlO3lhYAame40/LmF6N7y3fhwr/ik4LeXbK30XCPX6b4OkbJcd2\nfb+O37MJTxEpAu+rGcq6Te/Ru00o82KZUFYF1LC9l9Pcg+VjVS0HPi041DoV\nS8Zv\r\n=5DV8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEq+qENE/A14USPSpTpQVGIdX0IjKUgT2iCzBEOUbyiNAiEA0ptdw4kMsqMQpZvYFBvWCX3+qPBXGM8tq8fBiHItUwo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.19_1573515968399_0.8268892882886505"},"_hasShrinkwrap":false},"0.11.3-alpha.20":{"name":"@react-ssr/core","version":"0.11.3-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1cbf360882ed9e88a36e7118216e28ca64eb41a0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mfXshH7W4vVjFeYj+2eWKm+BbO+YXoGFqpkUyamk02wzxJeKmzQ0bO4l2PU4jb/6R4OI05N7aGvHIyDbQCKHtw==","shasum":"2352b2e452598fc9351c95907597c72bd2790eb1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.20.tgz","fileCount":19,"unpackedSize":43816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfMLCRA9TVsSAnZWagAAxt8P/1X4MGes0PKMcIzeVtPB\ng/5xtJU0x/Wnx+kFKYE1cxrv3mhmkuNE6hqYHmE32u4bi6jJPYy/OaY3++zn\nKkwtBsif4UIpWy1J4F1WS4S3VHcg6lrcTGu2XA3LnkmumETVzFKseqw8JQsk\n/dMpJkDI9R+ydA4SFNgwLSIhiXfFGJTf/4D4jo8YXcWAo2HwKYdlu+Dg3w2N\nXQOwEYG0BuuPM4XACJ2vfwkK4ucbMfuuV90tEHV9a5N0fnEOsMpAt9PbiLYF\nMtOcJPircrn9MpNVAxc8rGB0B5ACbL52ievN9Z0M3+X/nXZo+pRRPgwIWnx2\nzKIKrdRTPtkmpoANRf9d4f4Oc0LZAzzsumZIQ2iNzJcUcHrIxFghDSD+YncT\nIusTkiimRvKalux7XMvItdag9C495Gc7jGwuLQsYkqztYWAPESlfgQ55BaxT\ncASPwcHFL+Kdzm2Gcs1IX5L7ZVGELd9h09dbW4sl79rFAkMRAjK9lzeZex3q\noU1jk30YWUDTn/39YiquJ1Y41iq+HmMcASiW4p7feLgbw0/KufyqgttulZIu\nTHSgUdgyxyRCS2B1qgsK1Bg2ndpKnTmkhOCD4B5nsDFRUdCVcaQ2LykeXBgU\n+PqEfpmBh6pepkfumbOMAi+kKXGh3RetDzzOVJV37ehS66esKGMpKYzkv1Ke\n4X6A\r\n=4EUg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqdKq/SDJjI56KflGiCGjF5agOqlYnmZoC+IX1pliB3gIgDu7iRbAQAzFk7D3QsspLky1FOvtLQ590cEGXzffxoX0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.20_1573516042467_0.035214835604173045"},"_hasShrinkwrap":false},"0.11.3-alpha.21":{"name":"@react-ssr/core","version":"0.11.3-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f02fb2f2e9a761ccf0302206d3fb3231db1c0316","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LS8Ukuf20o9D3CM1WoJ3fiXpc5nurNgKawNjTOY/SihfZWEfebTJLbcYwn898PgBT1U5df68lc/Q068lHeR/Sg==","shasum":"8057c42e2abd0303dd68afe22b063f5eb2d7c8ea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.21.tgz","fileCount":19,"unpackedSize":43783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfNvCRA9TVsSAnZWagAAqyMP/2+JQsOMgc7FKVsGP60Z\n+79flhCf3onytM9kD/sbmXseHwm1uI0Jaw9UtLmrHxT5iWTusgsgPUbGrth5\nkeCZYAaIHytsfufZVrMTIFh9sdeRr7Q88RoVL+9sdIbQ2o7ZLpP3BhU0/YTL\nzlvpOnUdm786r+hmhFrxWxG1XOVHvEmkQAyG48wXSSNdR5cQj4gnsG8dyNDj\n23SEvAF5fswM4l8xSuI3XjkAXZDIZqX+C2eu/srsZ1U1r6gUMSA4gmyjKI+k\nOn+PdaDmYtPpLx2+3I2e8BHgLtFmwY0Gc46Opu9TKzb/nuhl5sqIcGIYYVzt\nLvVEcbTqeY9UbIdlHF/0hfek7FQLhES6kkq3ncw+HaZGPFvAjWfjb1na4CzF\n9sMWCzRSCtYxb/4lVM0yFXdVTda50iDFM/iWO9Kd1iHdAGmMYSav4ivcKNOv\ncwa3KRQ+ESyRoF5xWxu25Mhx+CvY9EQCnYUys2wEHvi8Jf9VO0L7G5G1GT1f\nr2MxjowU11XZU2gs7Se24M74DLBxgJYO3I4FjvMQXWc9VjiWqlrITyVTi1Go\nys0QQs9QTtQSZXvYwzPmX0igmv1vkaSqB074czj/mD7GBudI05DUpfzQB2W6\nak/D9BQsDum9CASYBIs1Bp93WtdCmHLMlBfvRYls26o/dIiQeYjA/mctzTiv\nzje2\r\n=XObp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDKTZgurylV/1Q2M30+COeuOie79zVVtVn+1wGfbhv/wIgLHnonccgVPvXxm/ChQh8ZVBPJJReBgQ+a3bg87r9Nqg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.21_1573516143302_0.28486309574086066"},"_hasShrinkwrap":false},"0.11.3-alpha.22":{"name":"@react-ssr/core","version":"0.11.3-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bc7bdcf3e2f239db26a8a9492a66e6563ed6fcb8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sTbgszeYmZrfd5oS9te2dXTWBzUfDSMn9WaJIVIxIQZmUCbCc4ySlrpC9C/gNB8cudskA5Ub1EVi7szMz9/VQg==","shasum":"28bdd7b24d0699d74712936881e1cf8005c8775e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.22.tgz","fileCount":19,"unpackedSize":43850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfPGCRA9TVsSAnZWagAA+aEP/Rm8agNEdisJEKyAbcBl\nLZlWyoKInX1DbX428mn6XwsjYcjuPhfnOkTKzarrfp4AG+Jnb3xbTtraFZAD\n8YGuROZxeXTH14IAC6hBqWx7mboYMb01De9VTpDenEC9ZUZ4jQJbK6P+SGJV\nIPlYStVHGWmGICgOizv+qTVu2FR8432/M4OiypQ+LxnjSKgF2TRWC/cNt87i\nYaPp2hS7yZ0yx+ZIZnUXWRqR7ymbx//AF+COBnL1wS8Ybh3IMsoPcdbKbdWX\nQpxZ162gnShshXuwZ2DfXjIpnHjfi/jMC2zihlgaXl29pO3FRGJCXU6YRDPL\ncYZeMDBLq6JUrMJT7ohr/a+S5YVvBA/uQDD3FpXnuDScBQOLgkGU9OoFm7OX\nKe5ehaDmUhyvNX0EKbKGuhtFw5UN7fpVEXf0ELVulm6AZujf1VOsZc+MLSa9\nlqr1HtQIGHx//IWA7De/KuyBalB8RIjX+XedW02Y7jwIsN/2TrFQpMc/IiCX\nCWzXHuq/q+ZeqP7ui5WRQ8uIHxYe2Y00IWeQcjDikO57H5Ab4teZfDL+H3Hl\nsPdNb+rixTARtgdAxoY2ZrTQ48jh17bz3GmQUyuK3tv8GmxmYuqdZ+3Tozes\neaOWpTEFhIQw9ZPTAd9LtLoDIuIQmUrDaiNyAbQsRJSWPEvbXiSHLpXdNtvX\n6obB\r\n=sY6n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqZiOb34XxHlTjwEmPbAxO/5PTbtr96EUYw7Eskn17CgIgNhy4otyAAveQg1vDgdQ5Ka10BJLDb9E4mPCjCWN1mU4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.22_1573516230108_0.6276959173894026"},"_hasShrinkwrap":false},"0.11.3-alpha.23":{"name":"@react-ssr/core","version":"0.11.3-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e8c0c1eebbd20ae615bdd63d5c4d9ca10634439e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9gT8UHG15vdn6dwcUSp5ovG3jriDIupra+O9Kh4gVV1VA9E7zr6H5oVhL0Lba9oCsdDKGms6Vpq6+BJNYSzFEQ==","shasum":"1b03737df253f57440be06d700a4d4accddceff6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.23.tgz","fileCount":19,"unpackedSize":43876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfRLCRA9TVsSAnZWagAA5wIP/2lwAp3V120b9k8EJGe7\nZtOZqgJ0P3qy2Jaf14eLmj0dJ2hypZWZ6QMWhvXbBb5fYU0bkGiIZkmx6mpr\nc1WDsaKUFYAfnr1kMr5EdXY2OpOhExUrSxHjBmQkrx2wN52Hq7wMCHgvUv2q\nC3tbBQtlroQmY1crCX5dH6KcTijrf/YJq8w0cCq3CZNdOMqg/TYQvfUzb6dz\nUI0KFbxBG9JjHrPUlnFcdEbZnrJTvi7AyoppvYmsst4a5Hl4sviSz9W8bzff\nX+KZ65uzaQnxhkBcZ9amNxJ8hoYfQVOLrpBJxo/HITMX9Jx1w/Q7NSg6CZdT\nFeBuc3vrJch3NxB2TgMNhY4q9ZagqvB5eY1KEKAO7BhRzTZJ+3PK8E0L7gqZ\nCLqtY6QiE2gYZlo4oqmfQyqJJm/aKQk48IS1RAMeDMq6FhFTGMaQe8IJ/0k5\npQbfYIPd9XLWHCAYHszw5Wn/2P0oYqKedZv+OasTGLGv89cisCPgKTkqk+oz\ntDmu+sGqsZJM9OKHYtxvZ31g6DKlAcAV18sKzm5nIHjvmOdTdp4UEDMMqq0r\nhjMc4ebW/fYhOARnqvysrKtlKM4wK81Gi9HAMVqEWvDqqiJ0WJvYmY4HjIHs\nDr/jWIsy2U+4FnVHLtYJAZip4PvbPUP2b5eyWJozmEC6p8eGLXG9+/K79Crk\nvpTY\r\n=VeoY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGMHosjSJJuTzIegSfrp8Hsgzz5J3ArF/PDoEQz2B20AIgcpQ/1tOF1/veyV1Y9LVHfPB3PY0ISRvw+gsrRc9UT0E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.23_1573516362827_0.26076826222305516"},"_hasShrinkwrap":false},"0.11.3-alpha.24":{"name":"@react-ssr/core","version":"0.11.3-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ef483f3bcc3318defc2253dc2a7c7ea65f264b76","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-piPrgU3fOCCd22WHhlryuYj+27IE75vCYZNVDhH4pkfNFqeiyC6c7hbob3mgYuG+rJ2fYb3URucHb2opMkkfYA==","shasum":"a5efcc331295963226f45209d421858bc29d19eb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.24.tgz","fileCount":19,"unpackedSize":43890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfT3CRA9TVsSAnZWagAAKM0P/21rb4sL7NeD2KKAxkAe\nWEnLjAtwqWTp8Fw4xeeJPgSMyPRKdtVF2sFi6l4ijtUy+lCwbbdGOSbPoZxR\niHfTKpQBc7A40D8zQKmkNRsjN+NZK1h0RPG+tVRvYcx72MwuXQS3YDMfAY3i\nBrF3A6i0BZ9n4NESi7H9OR5zR4pBrK9P4yG/+4o185ZPvMEJ7hqlDUnTqaF4\nSTgWu0havlZjBdx9Fag616x6eYjy3h0eq9o1gursmtSAN3abCCCRBLYMEytD\n9grbSWiaiRorx57WxGqYct0Q0TDRZnZhYlmeWIQuEI64nHNIZ9mBBNKN13GW\n12WXKnjfRE0E/bTI561QtDhv2l/ggVUTjCJV/sm8oFIony0S9IcNmRGZ/0Ma\ngnX5ybvPEtoGutKjDYTe7AqDG0oZUuBkAAortqbylxWv4t4r1XsJ7pFgZb76\nrK2dWOCzk+cdRIHLVsCRe/vzeXx6R6WPYActldB3zpyM5zWbb5rYhI7r7Pst\nzTyEfRsOzeEpao1n3OrP6pYuc5zv7FkvtnU4KzTKpMaM/fC4ye3M9hPTDZIu\nPqW7+gux8Wl6LjVxZqrhTLBFHq/dwdh7uXrAw0+oCMxMV90FHfCStDY3BWnj\n45VmbR3o4PMT/aM1oN8NLlqZX5jelgn1tp6XBPPPXQljB1+LbhGN8yYLT+kL\nSA9L\r\n=sUi0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfjyG6GPQ8hQWzqZYiu3J4eSLcPmrA5mB/ojDOjTzH+AIhAKSQQcBtkwsApSYlIr0/enT1V97pHrv+b+FeS/2pg3vt"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.24_1573516534736_0.6608024143462359"},"_hasShrinkwrap":false},"0.11.3-alpha.25":{"name":"@react-ssr/core","version":"0.11.3-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e7670a18e846ab862ff5b5c9ba119e631218f47a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sWZL0ki+jWc//88zxjPp2sYBHBAo7omA5gyTt6qgYBSaTixIDqOBvT2yo3mEEEDcDEbeDz/P+ziYRnalsXy66g==","shasum":"65af801c1edb4afbcec7e707d664fee1ec2ed4d5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.25.tgz","fileCount":19,"unpackedSize":43946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfWgCRA9TVsSAnZWagAAfT0P/2TT68FWNUeULip25E3Y\nnZjC5jalnR61jsCK1mlHs0RATFdHmMHXm352z2Cq6PlKwYWmDd6o9TSvpr6i\n/XFEyi6ZZyyGrHIf2k7CdJ4nIikamoppNdtZrmuaD7NS0f4iDSGWyaN0p3Cz\nubGDZL+Kd8FxUWt+MAOZnaU6z5X1UNCDgwwuiDqT80vZaxR0kHkjH7UaHjO3\nZBaYAIIYzDeDZXjqlZLqKuW7WddU9PjgZGQXyN+H2Uf+/srjMoJgInwTzWC+\nDIJDZS/ULYDPI5G+/DYfUBGV31KCXM7Zy+/D5uXldRP7IooCcqfd+M+LDCQL\n9fAKia2TKh7TAnuiHVP2axc38PM6WPRrzUodP/KH+P1BnBBDoouVMk1hBcr8\n+xFnbzPkQAvxXGmzXP3MrAk1NQcb+vAH9ohhappyFqAGzODTg5nSDBmaPL+r\nzC6PO465lZPz6xElojbebKqVs2KBR/O7zdxjn+FeEok3khND1zCKcvRFNQ3K\nPrOyyfZa/52plQ0PZ18hcVLWxqj75V+7EQb2Pn72J4dvasebr//pvi0vVjhW\nKT2XHM0rh9Qj4897RYPrSjKtzNfXCs8oWyXhwSPpTJXlahx010wC/eY6+GYn\nrJS5DckpofWyti36KL9NpvtD2SLTuHgrbMYQcX3Lb65BwxtJdRzRwv5dxBoh\n6SY7\r\n=og7I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEbCvF8oErSHBij0xH+GabjcNB6+UQuaiJVr0BGle6voAiEAvQ3wI8z2pREhY0QT2bYisEVCzfwShq2hleqTjjzH3cM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.25_1573516703588_0.8239416901335184"},"_hasShrinkwrap":false},"0.11.3-alpha.26":{"name":"@react-ssr/core","version":"0.11.3-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cb325e8589e9324da5ec10905caed11aa155edf7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-srHuxKLwqjXVjjknWRprIl3sLtfbnuYLeW4FE79GFevbHG3/Zmcj1a/HGjSIkuoA6Ilx04wDwSDy++rI1+PIKw==","shasum":"a3843106e4157eb18156a58693503a64130dd9c0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.26.tgz","fileCount":19,"unpackedSize":43946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfi7CRA9TVsSAnZWagAA/pMP/iQSJVsQLXpjkC3tGVDe\niYMQnVCnp1F/eCfjp7pPZLeGIsJ25+T+bRq9bDHX/x7YajXYZdatZ4tcNEEw\nZRw+MB7ouwI9pTcUSvGsU3bn8inBwWqfAdbeRaETahS9ITwi+u4M9kh5fDnX\nsYvR5k0hU1otm7V7oN/yNvAir9bcyYKh4TXoc1bbS+V6UdOqfUHuFrtBa3ww\nVM+izRO0uqnGLL8kJiNwkwlo3yfGEjB8/f+WYEXL54Ljafo7c97lXa0OYvzG\nwlsw1QukmyLvCX+9sP1VEt8CJE/dNfUmLQvhIzvD8fM2215V/7AapOd8xS/7\nTZoaoD4lC8BifsuUyTC0vi9AZWdSXDLVdATwdQY2XUOPIhCA3SNRB6dxudCu\neh8RT037GUu8UC6+nuVmUo2xeMNQcUk+lijP8G/SHBAeYIZFWRL/yvYtx4iF\n0EG59h8TRgSUZIabhV/hTeRrnNqVRjVSNrgw23SXjJEiaaRFummp/Jvylcdp\nVGTFWEG0FYuDoVFedNpte3Qm+bV+iXvNT3W7L3dGf7Ippa1UheI5M2nve44N\nmFswtqkN8YopsG3dFTGq4k0pqfqGjQ6I/AcoZLumCfirP2xc/xJtCgYi/cK+\n5ih3lKDrq25QxeCNC8H7di975goIzQpGac5YMEwaG/9nKLnk5ciEOvoDN6+i\nNHTf\r\n=GXbM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGReNRP8AUnSRX+HyRtRpBifOtb9aR8pI7wLbSD5ZjrKAiEA3Zq0fWdzUjoe3yaaxWrT4ONE+TNAh7adpu7ROhqGd24="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.26_1573517499506_0.20557745074983247"},"_hasShrinkwrap":false},"0.11.3-alpha.27":{"name":"@react-ssr/core","version":"0.11.3-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs2":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"88a8bb544a6be02bc3ec6a091aec6cbdbc1b418f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-v18432CghU40aNMvCH4ifvDXMbLuYNUV4DOzDkGqxnISEiQcKKBlSWSIhqxYQ8Qib+SLBLC2cWVuyAkPVHWvxQ==","shasum":"47a1af84e1a45ac96bea598a00458890fd477635","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.27.tgz","fileCount":19,"unpackedSize":43943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfksCRA9TVsSAnZWagAA1gQP/23lNGJctkVj3Qoe/t41\nGsv32DVicJqa49Ksx7e2bJKmb+4Q7XEEVId01tQx4cp9XypBI1uu+GcK54At\nicXRuQIDZhC42IwzyOYx6NpS37ZwDmERQZwK49mY2rZJcRzGdd5roCaWj4j5\ndDfbVdYmovOr1DAqAMA/4vWAeklWQENzCQ8aemG8m99d9YZxfRWZMPk+BfYy\nNUqyVUVy2Wummw8k9aX+blSvdbbbVkJFhQ3emrl57IMPTv1Hhxp6TT1oMokl\nsvP6Abtu/dVgdtGKtSMs4SytQE87Hl5qChaoOgm00a/G2GdHN3LSRwQJDe7m\naoSMHv6mIkDK0HMneDwgb/gRZ9jnhd0YZ32ZFyA5sMZIhXTPGzE2LHtiqxjF\nnHOpBrZN3xtkYVlbbX1BwMTADlY9c3zaD3VL4uFQ3ACn2icDMVIRllULvxbF\nqze7u8hmvxQa48/pUJEu3MiUvXUzRwAACnukLeZYRAUavPn/p1odHczYPDT+\ntUBYhAxHWzwu0UF9byvHXG800kIPO4qvXJd8u5JQhYB5Cnf2S5lMK3y1cdGX\n54cGLxWCp2+THAlRHi4aI00tLrvQxAMLBa7zFq4Zb5GInDc1oPtsUoUPEc+G\nko/mNk01acXTkcn4jZorZPcvF9Ku4niIAMOJjDRBYqKZ0D+r7KhREXtXxOr7\n31Oj\r\n=UnK9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2Pe3IORkQU5rP1fT1M+5ZjIyfNSX+92O73QzqJGf+5wIgXczSH0uFNGwwc6o8qEh4FC9C9ENEdcqHPpORE+IX5tE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.27_1573517611681_0.7730784646144411"},"_hasShrinkwrap":false},"0.11.3-alpha.28":{"name":"@react-ssr/core","version":"0.11.3-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"922f76b26e1e2b13bf70d0ed8b99490815712418","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-UXlwserq4aqQbkac3BbNiIwQDCntWXozi6nlqHvEacwWgBuhakRm6V/6z1Lo8SqbHvnCUJqJQYXFFkCuP0v0FQ==","shasum":"448642c6e6a2cc785b2530d46360557be6fda213","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.28.tgz","fileCount":19,"unpackedSize":43946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfmmCRA9TVsSAnZWagAAcX8P/i8Rq8YadQ0EeOsqdwqp\nkjGndMQce7ifVzZzUvDVrvKHco+1/lrKVJ63/xFJgIcDmo2E4fhFepCQ2wWe\nSlzXZQxqNaKH8qcaCTrFRlDJAcSzlyW6J+sg3YAwmoxC/8DMw5lqqwDPVLgo\ns0Qish+8Pz0W30Y2b4P5I4pr8oyW4kgyUo9LmmVTXOYaO6VWe/TiGh+0h076\nnErFW0PI/ZtwafaqAzvtAI6iwIPNR1qf1xFtv0c7KMteqqCHquHeJBJmcHFi\nX18pl+5egoUuXfTyEhHkYGmklR46nI8HbaNB2unw2ZtGAvV5Yhrfh21mUZEL\n0n35J5lZ7aYjo0pt+tOPDUfXXZMOcraGwojU/J+RBbCKcNi78InUPzW1Davp\nAqPRZbkqrRqHmxX8za9Jt6fgNEltWpebmlh3tnAW1Ak7lYMBpptG3GjSju34\nvtK801AGfyBkT/68HhMhFXjE/cL0d4GL4O4CDH6kV48G1wlY93ksF/JE2VvM\naCRzs9OsZGdFgiBfAWnTCEmpWTPftZch5GIhBLI49wO0GrTIpdssh/WmhlZ4\nuFKMmswybB0M2XZa3wEP3qE2VzdCkIZP61cH3Em0vp4+D/E5Im1mPwrfuZOM\ntsZE2K6Tp1TKCb8rGUuBgYMv4yaZlSrLKcyWEKYjsnORiDO+5sz1NZhmFvuj\nE+cg\r\n=NflB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjn7lwjSQALmTuNB/hz4yDAo1wUdTPWqvMRm05pnwRygIgPLa4xnuwq65Vsu8ETzimp1p5VjBG2BU3S+OMzlbwDYM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.28_1573517733987_0.7721339169693029"},"_hasShrinkwrap":false},"0.11.3-alpha.29":{"name":"@react-ssr/core","version":"0.11.3-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"34a8c6c484915aee6bbb0e72669eee4a10bf1109","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-KrwZWxoL1PhHLGpDUIQeV5N73QDjE1McDQcVPcBhDuETW6nDGkS/fkVx/NeBlJO3y3LeeecmQl4dnApt1IbjYw==","shasum":"fa1809d5fe327192a65d3c9f777090b837bd19a0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.29.tgz","fileCount":19,"unpackedSize":43820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfo/CRA9TVsSAnZWagAAiLoP/joB36qWjnI+JguJFRpt\n+R3gwWtUBu64IZMntMgTxLyPDLgWTQRkEcqlKuEoSUJgAScXZGfni+PlLEnX\nEWfLtN0KM5B0UJMoCnlEuxsvCZuHTsk3jb/WwMkKbbnSg74iYgiv6yM4Kq3O\nman0uDJLmd+8O3acwEqNQrTuKSPb7etKjkWDyjWBIeSnu0Np4DrIoxoKq4tQ\n617MVMGM4yvgQs79Go8ChiN5V4Drkshd26AZxKJzk39qnBTDHArCm/DS+pIV\nltJlk/f8UJq0xsUAa27fWOjPqv7AQwbaEN5I2UypHTXV1JtQdAzoC60G78YG\nUoSNbGCIuVKSh41R/GaDH3tu9UpBbyez6xBwrrTurleiKDrEPzRoBvR5O1z/\nQbiwmDDzdpO/BNfe7SSvLOTTo9ZdRHu/I2bWJH1x5omJMyC/v6ihiIxXyvHN\nxXQNr26PPeZu+zhWk/dDXBVw9jl22xd2m8n9IVbBtELQ2/KCDMtC66gwdqfc\n27IQrtyTJ0OHVE/kewtlUflo/tZDmJuakH9VAL+xPpB6WODjaWkVnwoSFPTJ\n+wAKmE46j4rL8jYVsCxxseLoFh7v81fCEsyarfiJbBzMcaPJqgl6lBnEQ7oH\nxh/g9ASjfpBSNP2GjFLOW2s4hZmWVmb1LCJo1j4iwVO+ZT0uHcWS17UCk9oj\nq65G\r\n=/pbd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDidoSEIFa/FhCdFZwcLecCBCXNaUeWdfn9GnuZjuQ8lAIhAO4KXw+QaY/DQt76IFJ/kKFKkjQFNfllFNpoPfvT4Wx2"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.29_1573517886953_0.7564035990931304"},"_hasShrinkwrap":false},"0.11.3-alpha.30":{"name":"@react-ssr/core","version":"0.11.3-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e98fbdf80d1c3564a99731901f0128896d17f633","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-xUMOifG4oXBOrg+rOTJrD20sYN93Q/jlPEJr+OsG2uLGQlmqGbQ0vzoZY7cp1hbzaiJU44i3hGs1CR5/p894PA==","shasum":"ba34fae6800d59235158e36da675cc670ff59a0f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.30.tgz","fileCount":19,"unpackedSize":43882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfqvCRA9TVsSAnZWagAAsBsP/AqyxzzLvisqmUxtZePx\ndnFkiuYJhlp/INz6O6r8LbzJSRVHU9ePx/EC8JAgywovZViqacSIsKCGT58z\n4Osx87vGy+7uTkZm49S9mD+Muoldmoq/JxkHDOEUH9pggT8PEuYmi0zRZN1s\nNWK1Mg0NBb8qYXOVI8V70S71eNGCJXpXoOLHQKOJk8vt0nqWahdcuskzFYap\n/tVWeFYWVaPSlxV21IeoZ5Y5JmyK53nT+pMyDd1eV9pad/ivdA8w9VpFKdc1\n2uxtp5mBaZacl0ecXAm/AbB3Ub1q1cmWk3St1Ys3Awg8+HLhKh1/uH48FF8r\n67BE8QOV4wgu14fN19wpc8q+PxKkbxLZKhDeSpEJFwgrpWWa/1dbVPUfXBH0\ne0TVRYeEWseEjgXvDd/dL+xZN3z8Sk5ANBbk70RXFMT3+ikOoaEvwCEb+Two\ngkFxwzeiX6hsnvNLO6wCFlqzdSeel3545ddkDbVlw1KamqbEiB4syJUPQtgG\nMvPcxTY4AKtdF4oS3cuHxRNLQUK0oci01ICdPYWtcV8YGmFVHdFq/4NEg1Jr\n6ofqKrOWyyOO86bYGj9/SNpDz6A9OvSKhtygLg2AOW4D6mR8WOTSyhA1bDMp\nIwN5joAAVdK09j/4tH43tB9Yuvth7nSdGXuhyWaPmGM+VSQBTSD/ou8PB5NA\nk71x\r\n=4ybI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkfUfHMKQofXxqt1BQwu3fvlpmin96O3K04vVZG6utKAIgF2c+JAd6I2wjd9Eq6qaXpvyqM9CRnO5r2GUZcpaevYE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.30_1573517999152_0.8767051593805051"},"_hasShrinkwrap":false},"0.11.3-alpha.31":{"name":"@react-ssr/core","version":"0.11.3-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"42f844b1b98a37359e436944f8268196b9609dfb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+JrW0wLPua8kaIDTgT/Lhe8XMmtScdAGdZvF1NMpcUcgBP+4dnKs8tpRCxQJc4u7fMV0R0Rx3h6m7tLIUAJ+Ag==","shasum":"b3e9a7d8d0179faddead1305a215f29c18028ac3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.31.tgz","fileCount":19,"unpackedSize":43882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfs8CRA9TVsSAnZWagAARv0QAKFzIA3JVuDQxiF0NrqU\ngHfiWUTj249iyoSvL6fwmNRKWoZSJH7BgPoOd3FgnIZWbovfxP4rY7Bg78l6\nkUmUz7UdrvTKB1RbaJarMoleAEBhxpV7xwsRvpE9cDZs/75gjMORMpwikpYZ\ny11VWeKjsCBEjPEql9Zipw4YnmRWE4ORn0mOhXroqmTimpG3GSYVO3uK9GUn\nlna5waIV3LDXp48hxZ06VxfqhizdNJBDbQAQQPCQ18bt3Nn5tVRh+wWC8kyo\nPRnbyjC8L/VLzgNpeem/jQhPsRcvi69YUB2xvuUC3fhuSEfEb3x/kwa0a+XM\nDVRXUgTyEqurJ8ZrZonFrmve1mJRvCvLSQbLot3PQjo1t0s/SgIC5kk7f7Q/\njzZNjfoo9selWow4oY1Rz7g0++ghVw5gmIrhDX9hupov796NRYqvGhyPoPNU\n/Hvkqroe53BcAaIH+/vZ3yrGb+yFXPZGPlOzAw95YwjudA0eaO+0lClHu+lG\ngGtTMwVoVlXpxDbIEp75j/fpTNkdqq0iy3D1kymUE53sl/X9j2oj/AujI4Ba\nwuWRXYnk/ePCC3q9k+tn645w5RC5IqKMMYsUIZbKaFkpdufFwULVdSOmnjHk\ntXDVxRAv6zwWfvrkfsw4ruaDJ0pqlsGegnSIiSN9Dk+RlEdW62/MvC4MBKRG\nUtWt\r\n=TaJI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwvD44WRlqNX2u2H8ULXuaIDDiDnRcoyjt75qka3SQyAiBAZX/vyMTduLvufX8QWEjUn50ItMpMqz9tZJBo9hTLDw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.31_1573518140138_0.5604936404673992"},"_hasShrinkwrap":false},"0.11.3-alpha.32":{"name":"@react-ssr/core","version":"0.11.3-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"486b258287b6a5efa672407317530e860fb035be","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-2KEfwB/vNQkT/x9s+8/gvTKCkorZl7P8OHcZbSoDoSw/nk2FtU7XIbQYm0ODb9uILoUUxWIMyhDEcgFv90Sl+Q==","shasum":"2bbebc32add29884ce839442aa69ad8a6eb1ec1e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.32.tgz","fileCount":19,"unpackedSize":43873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyfvaCRA9TVsSAnZWagAAqpYP/Rz0pcsd3rStcL2uMUKV\nmG6p4ZAok0RdNgLu1bV1OOmeatuT/rBJJ389Zr6usJqulcws5N6wJHV/YGA8\n7dywfuUScoADBHTOhWLjQpqimGu+bNLimL1YnSMKJ6gzkyG0aL63slXOm6lk\nWggom2QxO/ylELjS12JPZvZr9pTcPWHjbAM3Zver7R+dhjrnLDCskAcDYnh+\n3SzoHXb5BP0is8pJXBwsFDuGplp2vr7l9J2Uvg2pP1QmaCn30ZA/RAfVfKt6\ndm3yLEPyEt44F7w6PD/0eHL+sinqLFXynDttzSr6Nv0aE3qGcTJKzVfqAIF/\n+Xo8iY7ZEARRTZnhDTDuPDgXYWlet0AC9VOk8qsE7rtQ5XgPIRSBVaMjYkiP\no/T4HQRyLxGia+rm2kOuTiDWSl2YvPRV+gBkq60dutSsDgRB4j3M+UUFRTUR\nYFO8u40Q+WqHJWj4of7ZQe0e7TcBDGEV3/8ggNT4i8uYGGHP1eAS7vQZakiJ\nl0S2Wd1sxdgFVDLRoFiOTiTYAcRQ+VzYUmDTAo8dszVv6Zr+CVUobT0QDR2F\nc7Sbu1qIujhcilN/DA7MgCr4Q3BWX0Dr63kUtav4QNz/qXwbRRLlgzmEsRqZ\n/CS7sQdOMT01npo8HUl3ZYRyoE19JjKkeIS1o6uihtPk5mptusi1OzgoTP1O\nAmDF\r\n=QPyD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM//B9nYc9aPQFVsQdHbGmyU8vp7bCO4s4TLlqDTd1BgIgHi/3HnLI0YOreDf4meAdMlfl91cQd0DXiklaYWJ7XQM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.32_1573518297700_0.49709628576292864"},"_hasShrinkwrap":false},"0.11.3-alpha.33":{"name":"@react-ssr/core","version":"0.11.3-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c846eb442b98db82b089b26f354645e02a21ec52","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VUxLmj7Ia9jQVufuZkENgaAU9Gqw6rqVgONZj+lVzPpxOfA3+1C9m2VK1Y3oPmGj6/DqP+/zo47Hca03UFvEIw==","shasum":"3b891c7f1111972db855b8cd560cc8bb23fbec71","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.33.tgz","fileCount":19,"unpackedSize":43934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygA0CRA9TVsSAnZWagAA6UkP/1k8yuj3nIEvEzRC72m8\ng2l3Ll6cv4aqSAzkZnkjX+HMjCITIqCj3QGQD8BxkH2LXXgcANtSkeqq3b0u\nLe8f388lP3xa8KIQRaanESY+KQW7C90nhRW0lkwi/eP0s+gW2O2SMi8CAKwW\ngUqWJRjrNd7Ci31zXSnh8Y0I9pc1sSmM8PK06CMTn2xe90JGzkynT7Jq37t2\niy+QG4UrH6uBRMNWpbVX378jj/Byj3okJbBc6d5mXFxfsx7Eko4IogEThVr5\n3Lzl2/RPrmcLlvv9w3jA/x7VZNRiWt4mB62s4xpZDbGx4EpJuaq/2SCbVBRM\ncyiQQD7+6I+NovUrgEAiiNJpXS9sknwjsfSK0yDZVbsra4XcZTDtFaGOwbGA\nvUk62H8gQBGrD2nDLQPiktWCgjJGI9cHOT3KZEZTEd9uxy7RcXRbi5k4ydtk\nhrl4G8Yg4TxOdrnuNU9Yr4L0YAe4POvBYa+klNMxGVkFEgKb9zTlPWIDiwho\nyc30oVvUCvACPzc416iHco+uN6W/brauT3e8puRD8V6wWG6Kgdf8HChKap/z\nUTsxCgw344/mPtlqmMlHZ9ED+MQDzKoixp8CEnpVFUVPtCFjxR7b1JiBIBu1\nsIaLEGkAA5LyG/3vBwOUo3GZFBdM29TeC4RQDso0bQ+9aUXZDlOenZi42lAc\nPNtL\r\n=P+Jr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHLTrt2kqM+5tBegcFvv67Xtufop+OKyWrclLOjPcFn/AiEA3OH1WjsLCCvvdW9Z1hPNEsVT7uQ4QY9pnAB18K5BcRI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.33_1573519412262_0.024285337678536578"},"_hasShrinkwrap":false},"0.11.3-alpha.34":{"name":"@react-ssr/core","version":"0.11.3-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7ff81b05370b517372e69031dc11f0b3b3e85dad","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NDaqUamEUXtlVCBVH0v02aqMWd0S/31WHYZQgW59xw8XsNQneNyQKoWR3nCALZ9gZ+aqlPGy4LAvUNXg3t/fBg==","shasum":"d9dfd2aa4d219cf3a8f6145fa4be2dbdab431e33","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.34.tgz","fileCount":19,"unpackedSize":44090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygCLCRA9TVsSAnZWagAAGHUP/iCTNTSQAJluRBhtaqvZ\nFYacVfYHYgl4bBTmlNeInD0cQqwwJQKLGACaUydhsY2hTcCoaFuUgg5puqKy\n2AG+6KXByHvLu9HKUJjj+7nklNqS/CjL3vasfRVSD1BsZ4RqMyPlbC20sqIU\n8S130ePvf/n6kcmLbMECGGwanTx6B8eXGkZzAJZkXhZxI4qBgmrN8rIWccAh\ntneLsNpoQuhYzVrkUsBeQw8Shhx+nSQQJjXEzorHEZAPIF8MPcY687EaZ+ne\nX6zLExM61w7SDju+9akO56SFwwjwQ1Cwx68/THlgGLRMgmOSBHzO5fAcIgCk\nEgNmYJ+klWiqAHjmz4T43ZD5PYyV2k1HyVp5ZICMVSMWU+/815qWW/V8KoXr\n6Wt5czTaEIgZeJsawlMAVsm2b8wSBTmA4iyHAdERC2S4HPjEuK9VsDzScPaK\nBpeA7ZLKDV9bGWZEiN78AoUVyt+FGZhgdRR7EPxH/ZNgyRecZqcF1r1luu9P\nzX4/o4PN/+zXyw2LqbxnlQKnnqNMcKnJ0h8Zioeql8wIK7pHHZrnfmJ4bZ7q\nMVP4ccfduplDG9WuG2H50tQg/+4NWsvnAPeRgRUnEY1vTDY3dEgYJ8ZJIAle\nx8CZ5W5h9APRS0nH5S0gUxkgNUIOcuROlMq7ybjkgDypPqNyHb4uAREPMTyn\nD+r8\r\n=XwfC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTmTBV0jLu0AsaHMgXDPZo82J6NYPPlJmrV+qAVphI/AiEAqTSniKqGCgnEJiZHbQvs+JmwH75jBpt+XdOePrgqP+Q="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.34_1573519498655_0.773762097757547"},"_hasShrinkwrap":false},"0.11.3-alpha.35":{"name":"@react-ssr/core","version":"0.11.3-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6e059d822830fcb08bc5bfafaa3c52ef23485cd0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CObGRrSjochG+LGmU6BrpzzS7gARNUeGjyavX52moVt09oxIBhBscipP/W+/xFoihgO7Om4aRBTTgx0SXDPwCw==","shasum":"ff2f9ae6a6288259490612b3b4b9d15e15124c94","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.35.tgz","fileCount":19,"unpackedSize":44028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygLbCRA9TVsSAnZWagAABPsP/0JD16Ze7Qb6/VsHKj/0\nwaE+z8DL1skXrCFTZUoij5zeCL3bKK1AflbMCl6d9DsGGW7Rz8Na9vbqz1t1\nkclRg/SinaHqOd9CNUQU1HunXJuv7Zs6Fc9sRr2tlbeJMfnqTiDf8AOwOM9S\nWgwXhkHaBnmK9dGPLOs2g1Bi28vj1qpZiiNueD0ZzUynS+Znu77QK69942mj\nMcBUeRzmWAjegngl00VCBwJxdWBeMg/rnmvK25cK+ZbgT0wRwBq8m5ocSgRS\noOnRUVlgbl1ZVi5fsw6G5iNUfsQO7QwfzqmNK0oVJQWbKjj+rave1fEJB1vG\ncUErvXEw0nMe2RBHkpKTcAHSFgtwXmlTuojwO3bBkq0Z/AFZxi1/NfhF2alp\nE4u+2mcbTtY7oe/BR3ZYQjrUyJ0RcEok/LUusIXBDQ5WswhgyuyMhLcuvzQr\nIDaZYY6wP3nkxIvUlM3qtmfLvdZRpLTGJSPB1sabtoZO2OEbG2zasANkAavZ\ndvOFfcMD+Lu92LsuGmGmDMS49V6DXgDZ3q+4K4/Ca00Z+bLLN2/gvu2yYz04\nlYETGYYYtAHvnoAzWV26PjNDIz91/1kaq6jHwi2Q5jNU9sEtFHxLO3zWAiG9\no6+7QfRFVJZ3jM+d+xmhOjF9N9bpf9ASibJyB+mwSa7hquynz7Oh1Y9VB98s\nyXU+\r\n=DF1t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3VwtD/Ti8wsOIVLUY2wQEYXJaD9/gzwMJm+Ldg+3eDwIgPD0QS2YXWftVmPpjzPeNz4l8qv6XXA5M1zJTrvs5YQY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.35_1573520090688_0.37518642771401667"},"_hasShrinkwrap":false},"0.11.3-alpha.36":{"name":"@react-ssr/core","version":"0.11.3-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"65b325f2beb8643108a59391bf36726acd267269","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VroLIvfUbBR0i4iqKssKNOrfYD0xcw5tmK9m7NH6aClyFSSIbLgb79rtuRuuu3OOFEWeBXCJ8N/hC7wXgcjSvQ==","shasum":"10c32dc7b35d064110af95ff16c0f25f13692778","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.36.tgz","fileCount":19,"unpackedSize":43921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygSrCRA9TVsSAnZWagAAp2oP/2cbg5d3vsBsaPE5C2Gu\nO9HqG9mIcD6dFityQDcMmsUkspQsEaGEzNSKu2gYmhvdCUprVhAMsriYc0Js\n1/14hOzkckGbIpSY++Jt5wjZbQrQDKfE3yKEW5zoERV0vInJo5df9yBAaLIS\nU6M2yd7uP7FFrGkA1uTriJ4uORO6pVea6R9P7Z9P+FRCcu/CsXkUF9CFVBUe\n+/i8rpl0Vj0JzHEugJhIvrpjRx0O47shzc+Txa7khZ2weTld4ztr22tKM7sT\nY92lby0fsbGMQAm333CXBOnYzRHvw/j+ACL/I7JzbwvYE92EjrdBZ9TXFrmF\nLwqsEjuhY6bUhjurZ+n7l3+zxQsxH7BpI8iEj3mAm3cBc7a2UmEAgYmCz3wn\noDf5FUsiLQVoxhz4oHRRkc9N8Q3sFzFzE84d5Yq5NxWSwJ8ZRS9okrxaHRK3\nsN5M9aVPPDAkx7nGdbdsO6vr7jDwrgpZ5/2go2iKYtgfnQ3DDt46Zxujatk7\nY4WYVUFMQOfWBvD2NwX7mtifagr19ZFP5SE2W7MmEJ0cFhnwyyBMjmjq/Z24\nN1rBXeHKdBZJXZCy6AgZ24QZ1P7dMKaxVG6xmQFlTh39C/VNWAmgfarY4qkq\nh5bBmplN5UwJGD9BBIqg/RqW7pPJSYbc0mDp1ZngX9JyVsSPLMoBWx9r2Llg\no+2k\r\n=Zpbf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICWDFOqaPOd65eJA6TDlrSA3aC4NNWwnFKpYpmUlLZWGAiBIRrwtCBXn5i4I9887qMvVM7389RQoFXfnDvlp05lihQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.36_1573520555552_0.22430205624403543"},"_hasShrinkwrap":false},"0.11.3-alpha.37":{"name":"@react-ssr/core","version":"0.11.3-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"be6f92d5a2360d992b2bd507111e20141384eb3a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-m1RWw74owHP1/5RQxzT0sVowy/QMlo/y1Oxz/cl940qUaE9M/c4zEhlregxvXWfYWxXmMZpsYqIIICUHlWQ74Q==","shasum":"225fafe059ceb63dea73ed54aa557bc560cd27a4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.37.tgz","fileCount":19,"unpackedSize":43929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygXpCRA9TVsSAnZWagAAWDYP/0fXBzMx/5KVmotmpHo+\nYQEva/kePv2PRrL3WoapX1OZQiRPCcZJDcUmhj//Kek5wzDmbRDXkf2x16F7\n0+YgHfREiXfP76y4+assvXPzfh/zPyC97b0rZzfMPsMIdAK2tlJoHe8of4Sa\ndAGrOyOsyQ6xDI8Z7+hV5K1ezgLAvfC59C8Zqdsf7xtu+Sh/3cCWxYl8KCFe\n0MMRgtEhaEgRpiLwWZcwgmXBbnAgT9AnXM9Os3JruUVZ5Fw3KXLH5jFu+JvT\nEDyq8sIFolVHwGDioqoOAKgT4U6ZD8aEAuLCDNCxlIs59ymSTmMzUNZ9Sczv\nC2nrGw8CO2VJp9QmknReSiLsSks2lnX0SsnMOk/6Dag3oWUrMQdB6E9QdaR+\nzjdlQfM7qU4VbEhNHbjnbsHYFlv2eUqHIdMnOEkRP3QmQ6bnzI+7Lq0BZVf3\nxWxlNRu0NUEXx9ijpbdLUsMuE7E8q+vVTLiyUFR91bbfILDClMT/ZcLrCy1I\n04LtRZxdNH+I2rV5O2TRSkFCyx0ddni+6LQTZ3eoLqqVMRFoeraQXUUer9V/\noVjH+wInoKk8Xu44Yo4oJitKGq0jTkYP7keQiLvzjYH5ItiTr7ZJEKwtrmqY\ntbN7IdSkHisbuCPrfcJHfHkIIdZfy1cQ0EVI5tRVxFpGTxw54AixyCNwNnhw\n37/j\r\n=ZYqP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzUqgkf25fx/hnadg7WR+YOxQcAt/mdJK6so0kpAwLuQIhAO7snarV4ZvnPDwdbxOGv0x6pkoqZOE5wEpzD8xMkHut"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.37_1573520873230_0.07728675697901011"},"_hasShrinkwrap":false},"0.11.3-alpha.38":{"name":"@react-ssr/core","version":"0.11.3-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"50e48ed94008c73a215cd9bf9f0968f427217983","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3z4mPFQ3po14hL+/hu1ZmTJw6MYQOd/Qwu3mXzIKYL8UKF9wmtCZG4NSHfQcy8idevoVn6Kx2IIeAYn/KHTnTg==","shasum":"e0f865c87508e9bf9f2caeb09aa68b76b0bff437","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.38.tgz","fileCount":20,"unpackedSize":43653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygiyCRA9TVsSAnZWagAAraAP/3dpO07jWEAUHEiA7JF0\n95oMMXb1wpK+8a5LyScCVEVg77E0znBziI5QdNRO/cJz1NTrG5AmKLl3ef+W\nCzBeCs18yw4VyWq7vPhJJZGxmlrsUwrH3xrrA66MNKoZIHJDqD4nRcKaiFD8\nisDDJKToEMlqqWOIaC4qWTyjmfIWuQLZpfGMsJWBNS6XqSHETaYRec2u4iR+\nbX3nLH5IjaPLYZqQGuf/ciGdHEbHGxncPO+fxiOKvE2Sy1SkboirJ3Vf6znG\nCILJsXsI7pOVLwSJnfBwG+BZogyQtsTrmZ2PF7wTYB6CpUPR1kG2KHMriRhY\nDz5Q6bXxFmh0w4MHZEVaXphukcYORiqPK6XyHzpZaBGVuNTmCLcK77RGLUiq\nYeakEaNpctm4pJGRxbMT+AjnUXqYlPYG5gIm2pvsj5OxjzJuoWxj9fKtgWfH\nCfVHhFR1qEdz00b5sXHAw+yghDQrgJnlVocFwgKsD6AS4f6oacB4r3WCBcpS\nHuss0sfVm3BMpyl/136LjrSz9dYUoupAVEO9JjFL6StGoKwVfhc9OnKl8d9P\nndi3vBteMzQ+dQJLvjOnb82SPs4CzkqaL8jyDXVou+UyXfbbdt3nLcpb59bj\nprYL45T9gaOOH5MnXPPjDO9tmNryaCSdY5D5Y7FIpBvCqkcSZLnkiiKPjmcn\ndBVv\r\n=ZWUG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDchpg9MvtQHNNx9chQqBIAamj71hBZOiRVUnCgOq0EFAiEAhyPrmiXB7ryy0Rpqna66dFACbIhhFL0pXDUMP/CBcso="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.38_1573521586330_0.9859246445975054"},"_hasShrinkwrap":false},"0.11.3-alpha.39":{"name":"@react-ssr/core","version":"0.11.3-alpha.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"26f6f24967d0f559d6c8dd1f4e8ba77cc8341fa9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.39","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-03hJxTa8IptgT4YXQx2OAy4ZozAGywwnKND8qWfWdo71n2JCppfZOuzAQvYI2QZD8okfFnrqqhuEo9yPuP10VQ==","shasum":"945a7e24945f2f9c144ec0bb04234a95bb74c963","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.39.tgz","fileCount":20,"unpackedSize":43664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygkBCRA9TVsSAnZWagAA7AkP/RXBFLcmkhbXMsOALO/b\niZaKewMJI53mhkzEHQKIpk0bVe5Vn6c8sI49ct0OTrGV3ayOdDNot3vEp8Wf\n1N2TFrB4Gtpil3X26Gb+cnrfJ8v6e0eVz8Qk25ByueQMDZUnJRfQOof02zdj\nXVZMgY38/u5YW0K4QseXGw7Bxak9YrhW8F/9j6g6sWBkwZGQ9cAK5GbRrcxb\nVgIth36x7hd4k2OyERhsZT4HuvMb2KrsuAyIk4YKykH9R1bGqhcqeJ+E5quO\nn+NViFneDQ+lvCnaBxv8Ye1nDswkDSHyGqpScm1qAC+GogbXZGfKo5X785j9\nkmHyswaFi/bDSKwuXxD39cBaFl8bUhvFb5+1TWPqiCagb2ZjZqd5r32lsVPs\n6y9IGWYFRrXC3AjD0Js80MiswGmc2GD+tX+6JCIav2yCMViaOp6m+KKALh7g\nvKG/WFstLALcqd4siumhv+m6T8ETKf3wckXVylzRe+fQTXKi6hBozei613t/\n0ttvhFwB+86YM07Za127/LoQfNYjdwmA89Glp2acm4Uw1UbWv6oG2+bYy8ir\n6eTtnShqbWfc4Qi3eOTeq6T1HsG0H5lAKJICURK83aBrJOMwl55pDRfVRAnL\n/WErgPWZ0lDE7YEIny1tFttiZo6VZoitOuwqxtb52IpRLEhJ71mRBLtAGMsd\nPwEy\r\n=cFM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgqQaWuZ9NRXXqdaq/1Lm6iNFc7vLgRE68StYPJoD3OAiEAn7Dhykl0yH6aAF0bqUTY+2BJGkpIoE4mxW8jEESnoyE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.39_1573521664974_0.6444923170156791"},"_hasShrinkwrap":false},"0.11.3-alpha.40":{"name":"@react-ssr/core","version":"0.11.3-alpha.40","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"173f19cb4a633f5e6adac529fd2d25db6425d5f2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.40","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-nXD2vuRzzuKWCMUg/rt8qyqUeKx83QaYcu4mFEhRBTEuYnWshYnLwf9F4GsQRta2EOrqhmdV3f0RCPxDu/jX2A==","shasum":"dcc56927da94ff85d976b7cd138a7590a0980628","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.40.tgz","fileCount":20,"unpackedSize":43655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyglHCRA9TVsSAnZWagAAJoUP/0xIhupuge2G5UauPYgY\nM9XXU3VhEceIvje0Ieh4uBhbo34+XW3EW4S6Mm/vv8AGGC4mtmFa3G+t82uq\nXESV/zfxxJhGZ+X6j0KzJ9wSFtt6OCOaz7s4yl7bhF7kvyAMsDUOR914qHWw\nBul28eKBHUCoiF40FP/zFdnZJIbNA/hf2zMGvKxqPE9PlywOihSMZJSQ8EIS\nhKgAPm0Qdn8balQcEEePmptej7rNVasbEBVyfhFtaKVFYawV7MGfnfZvNiHQ\nwXnOG5oWmQw5UOHyfxbM3QhUxzurHFz1EX2jtysSTZMuzOEyglLojdSupnM/\nPZ8M1Fz9yCCmZsHWHMihbJwARzjXvcbraPJWpE8pAzpGDUpugThVPDnr0j2+\nQkwFcnSWFk/MjBKk25GNuF6/z70L9j1GssyAU5c7VTlwY+Ny1y73O4ecFteX\ntXnLac3y6mlzuZFKp9xWn3Z39xAMOB+dDMAcGkCSIbgIrAaDMAm3IS9lJ7Mq\n2wEfPtDeKJ7sUAmVl424yOL2n+avIin4rQ2a/8OHiQ9ajIhftS7qfUEp6nYy\npoAhQz+IHotVQmScaLqcd6YRz2HYMrkzPch+EPb7GfkMpygNkoWKsV2Maedn\nFr/wOI+Gie1tqUAGlev/FcmuBc5hy3kMou/DwsinpYD1gmyJvUVmgsGoGAfo\nSDmw\r\n=a5Gz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDP8Xv1vC9rlI/LePse9gQcRVDMoR2B7f5IpN57lxWzhwIhAK2iXIVrP2uneFr9DM66gvMqqq2hzKwGGX7Nkwj3NQ/A"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.40_1573521734603_0.7111157529311773"},"_hasShrinkwrap":false},"0.11.3-alpha.41":{"name":"@react-ssr/core","version":"0.11.3-alpha.41","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ed2cde931223946859a26c086c8b7ab489908693","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.41","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ei6OcGLY0UJrR2nxeLCklAw3L3SIX0WBsDPEVdQt0CEY4nFz2Vdfha5AIfIgOhNT33WVnbz6qsr5PcZaUQJA1Q==","shasum":"c614a13ec4310c09297a580a8a883371f65aef5c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.41.tgz","fileCount":20,"unpackedSize":43651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygnFCRA9TVsSAnZWagAAGv0QAIz1fbA9X6k8tOdedpgP\nPUui9dmzbkyMh4uuKclqhVnPXmxdkdytA2+OSqDMY0Due/AISvoX14z07Dqn\nIl3C13Uzk/m/w6hRyTAnSbbn3ZLKfWbPPkAGo8j0AXIdmKD2NuUXh9qH5kaR\n8qABdfZuzTkd2nbS/94aqm/kUWOAy5R+6k+RdOONcYUASCb4fWsrhhB3e8iz\nLjcW5vqZYscXKU7Csy/gaoNHab3hL3sXr8/Ps81pottjwy4I5BYZhBxHmwfU\nebzMKi9ThPm7HU831LN4kc87X/qA4SDpMO5nMkam+c6O83w29cwbu47S39rs\nW2dK1bO486NNQ8jLqUCyrVEa5/619/wNYr6VjYZNSAr8phkpmtybh2S91l9D\nDYiEaGssJgmgNSJcaBAk921ykiyGvqq36XwyE1gXNn/c5JeEGwx8pNFhVYRN\nGeLp/OlkpXNlv1RzkFS89lP0gdgRlpGgDHm4tfcwgI9CYKgzfx+mPqWkhRgw\nyXqxcv1sUA9UqOJyPvWG12LzAVRtgPfBhUjyZeMLW4QWEn8OJ8DdLWzDf467\ne7MhQ1CQVpUPl7S0LA3TWQd9IzJguKEvtvC1K63hYS+tW4HrKrbzr7GmU6Jx\nOCKpNcPsePX9rt+WeRcT5+Yy1jcsk5rIkmhN6bj2ig4BMFYgTkoN2XZlRGSb\nqNXb\r\n=zQMr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGEv1Vr9f9xeFJ2YPzfN3pLt/6jrz4yRKTS8Kqo0dgnzAiAhsPKYKgGU4LxpMXe+eZ7cRQBBkQNYJmWnchoTLOy2KQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.41_1573521860873_0.09084720060427554"},"_hasShrinkwrap":false},"0.11.3-alpha.42":{"name":"@react-ssr/core","version":"0.11.3-alpha.42","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8cc15febe7abffba5a6c0ea9640c077114c201fd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.42","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-FoMKbpQY7Nqk+amfOUarDd/bUvTKqAtUXITJaDCdiBxDYxGnRhwIzQ8F5ecixkXrg2F0/gw6q2iz5YHYI6MSuw==","shasum":"ff9a9544ee77e8f63f5548eb8192f8a31729f889","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.42.tgz","fileCount":21,"unpackedSize":43697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygpzCRA9TVsSAnZWagAAnI8P/3IDHaq9BsUO39ujsShj\nJSSlUs/5fHYWgTcmm8vz39PNaWCXHh1l6zoCzaQ2Ih8YU7soPO9NiEpQRD35\nJoKvT091PDHKZlw2uYYE/ghkLDG/lpOTI+XKKrLOeD3g8Wgg94RUFxs68+Qt\nv77Zaq5cgHyjbWR4/JV5qlRmz3ws0uw56dCklCXa29I7NybP/0WGDxrUjoEG\ngoeoEKr8ZVulMT571CH2CJKf95zEBOO+3ZHyoCAKZIsZBVidOWFjz/7kO6PH\nYx1UHRskgk27p/IvkvqkokHAtT3nvEiHjDp+u0sdUkvvbtXG1GH8f2uCJX78\npIHwPzMwTRVPB20JdbVboWj972BIcTEp+V7qCocay1Pc0NG93NPq3rIhqaBV\nKpekkZRroHejedbr8CM83aDFIfAuyZ7thWjE2Z0UHaZC5tEWULFpIAmEoYuk\nJ5u9/RDA0255MtaHwzPEQPeGAyiHYU801LvElMFnzijYKMDZdW9l6smAUcfT\nukDDLa1wv//2x22GDitZetZ643vNX61/HGjPHHXJHW0OJnDSlLJLIQ7Xz6JZ\nseG0nK9syfdTVqdkC/eghAe1YhAMsL+7nYaGum2GzsFOj0PZm3LZcMrgRq/a\nrvnEJybF8Tu/qf7zHWvHE6xy0mPgpV9q7wihwKQgx0wEbV6ObxWUkSKu/VQ2\nhIbX\r\n=PhPy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETMsrv8LVJYEMufiojc2UcaWPPkjbByq8v4j4Ur2DosAiEAnIiEMZTa2rNFNg3PzXPPGKkwkR72c/m7NbqT5amtiv0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.42_1573522035355_0.798232015492802"},"_hasShrinkwrap":false},"0.11.3-alpha.43":{"name":"@react-ssr/core","version":"0.11.3-alpha.43","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"386be9167808c2690e4c456ace00942865320122","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.43","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-mLqwk/vK507UYjOguqIODfhYy0G50cYLCUHnBIkTk5SGwPxFh+kCSOJeIoYh05vFhdwd2I3St2q6PeAvuNTq5g==","shasum":"ac8a64c7abbc699f8689866c3d7af73c03fa5240","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.43.tgz","fileCount":21,"unpackedSize":43679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygrjCRA9TVsSAnZWagAAE9AP/02OV9D04iH0jG7aRJ3T\nU0jwqZyvNnUxYB3rdv/dxuc5GH16jOx9K/Uz6j2UaHOuhQPP+gVKAXmaSvYj\ncjs3aUeTZxjhsZajloMRRfKTn7IW2kNSUexA7zYq0q1yfA+xRAK4/sxRxGvc\n/p583RsIondFq2K4QAAJJY8OLGz9U0heZOhBeiY+UkmH8BkwkCXMMyADa6lW\n/rKklXcg2ZfDBsEnYlZ9NIDPNvFm+ec9K7VjYuID03KkD6u2jfQz4H3BN7Rk\nBFlE7CAksF3GRqoCCae04FmIoNdWpzLd5GpevFdx5EuSQdmX8uvkndhVGlsk\np1OqtYSeRNwlw+2YDAT361W/qaF0POhQO+YoNRdnND8117o3srwFtwY6vrVq\nygj9AKXL4HksGm/7StRjXzLzQuRfiXfq0N7RVWrhefxbHLJmJoT1MNRqF2hr\npMUSpeATiSh2yUqu+OfmWrQwOymZdysGQb0ZUrik5dJqQ6OFxH1rfgSdjjk0\np1QqU5L5HNGq5xnu+RDZSXARxo5wdROrC8+85C3qe5II3Eohv0l2J2Q2NKZi\nmM1p/jIh1CWWsR3J9R81YTxo+ekkQOv50vnfUA2X8WVvT3iHwzwZV0UWUi4W\nDNlA7mcY75mTJNBuUyTFrDrQ925fJnc43GxNO7hdXgmyN4lly3yOCJM7tEVU\ndeD1\r\n=DYsM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3ebkTeFuJ8lAX03dCbdGSaqeQozvTFOJB1Q9WfAFLIAiEAjlPN7E4ZEB4n/7dhe9VR828diWd78zE+mDAvhWLE1rs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.43_1573522147514_0.5034867169385591"},"_hasShrinkwrap":false},"0.11.3-alpha.44":{"name":"@react-ssr/core","version":"0.11.3-alpha.44","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"84587a2dd1a252fb56ab7af41b0deab2c4c07c1a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.44","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ROveGBRMez5e5JAwmgTKHdrVvuGD1gw4as09MCpo5ods05k+6BccADdVN5Vp0goxehRvvUOvT5+BFbMfGwFnQQ==","shasum":"8a28106926ae5a07b379ad7db03cd080c453b0dd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.44.tgz","fileCount":21,"unpackedSize":43680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygseCRA9TVsSAnZWagAAuQ8P/i1nHN+DkCJhbHy3w8mf\nWBljqX0HQ840ThrHKTMiTReXRsLcA2k/WaXa3CeJZRt1cXR7nHLfOFa1+lxx\nDeMEM2B0PJumOZo7Gv8nJ5Ml4hpSPCRrvjlTt7+eBa+SoaiZFMRKAwXnU3vP\nK/7XKqCSTXy4hDedjMc9tlU0U0nN0Hac/b86YiiMZakzXghaLNTr/Gi9S7B2\nJ0N/sLqXJTGsr8Z5ZFCNEDvbBcwRJX1qGQIy8mCjUfilDiCen5WQOf558de3\nPdEgcTpG5T/cSuk18UChLw05nisammo5snMIG/iUUGDd+n6f8kS3l+rhO5QU\nSf3poAc5Dg+HLRjbO8e32Yp81I+9fWlaCIG+QOMUX/48KV+vin0rRwV8c3yZ\nMZmECXVk1zy4WDne/d4HEgTQV8DEFxapejxFjfUqrWi1qPolsWDnBNkr9cGG\nwqezgwjbWEtBI0A7hsITGoyUB8lJnK7M8yHwBxp4WD6nfg3v7xKa5Zaykii3\n4RFREH/JmLSRbqcgQxK9FkPza19qRdVn3/VM3wPaUoRXTmNlMYDNWrZYBZbX\n4w7KsSPKz+7SY26M1RBY+HdtB4OnLrZkUBLBBKJZa7RirYya2O/Iqbmag/OG\ne9rnUm3fmEG2BAtPdHr+/2F+xC56jWNGki3YkXYzwRPWIPydUWWBj69PFxKp\nTal9\r\n=pp/8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPLW79sr6RuKcC0I3H6BCndEYeB58o8CEIEhUxRX9/2wIhAPYHglI7a/0K8TQ9f8JVs2aXvtZpxm10W8hHmPhwFGg1"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.44_1573522205536_0.14185240406959299"},"_hasShrinkwrap":false},"0.11.3-alpha.45":{"name":"@react-ssr/core","version":"0.11.3-alpha.45","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"22d9469724ccb7741a3d74e71baf35f0b4548f28","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.45","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sGTlS5vm4Yv9iMbXRpYHj4UeBHulJezvZAy17fcLjw6B0pNGT2AlfMm4s0zKmIdUSQrDaIzyZWcQ+TG446/ahA==","shasum":"96d349b23c72e1c157859b440578731aba246eb1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.45.tgz","fileCount":21,"unpackedSize":44291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygwkCRA9TVsSAnZWagAAtCkP/R55xtLnKnHXfnDU/0eZ\nDgrAer0QdZp23FEJVG7Qlj3H3O+8yb71C+e+Opu/Hhm8WG4snnOh/xZd1xOu\nys1Y5WlogyvRBUD/7cCVGMWERjXjcQU5oXigYGNLrrYfphk4RmbZFAF5vx+H\nQiwCCt+cmQeZOgK2bDTCpNXoHN4tZya3ACIa52mYcrW+aRlOwXQ0AAhz0my+\nhJulUmGQv1K0h9mchGRO6jmepvYpV8x4524LBm4hMLKqp82ou0UhCtfNsx3q\nxEvzcUzrGFAsAMGeOS2xEeIFw9GmseOTmpY/W6yIoyZqgrtcKzM2CrZG4nkE\n4nUAEN3T+ZiabZKpc7Cxvk5egV1P2+b2xuWzE1rzWvbu6kgumEHdS5ADUfs+\nA5/OodPuw7Adpp6ghCDUEz+jq2EofnW19VS2PTunO/GziRtbqOVQY+BkBX4h\n7Z3n36od+jvyplTJ8s8la7YEFDr6UUrtRMzzR0f0PaNGVvSmErlwG+0BqxMn\nrdUHC/HleyaLJBT+wKzvOh3eFSt9o5+p4uC5LAGvNMi6Veq+b0DZNJOkrCBK\nLJzT5fOYozV1p3xzxhfXdiJAHsJ85bVD5MoYPY682qs7xm2OXAe14Lo2grxl\nQ++5fGut+3Kd7Gg8gSem8kbXyLE08127nXAML4UCmdqt4lUhin0BuyChrwV2\nQ+Jy\r\n=7xMI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYr0EGCm44Agdx85Ik3+ZwUsaoN+/X91ixZ4nmE+i6yAiEA/CpSjKzHoaa/qGMvJlUAzkPIenEJAJfsT7f+wWkB/Ls="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.45_1573522467844_0.09881519605136302"},"_hasShrinkwrap":false},"0.11.3-alpha.46":{"name":"@react-ssr/core","version":"0.11.3-alpha.46","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2f8adb94ebb71b1712fc870fa1dda71a2d937d81","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.46","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BqlPTtjjZA6SY9FkbN0lp8x7SY3xEi3YlPqAk8ifKaTCtZ5VToG7IarZ+PygRkXgG6YYdj6VX2qogo4L9YZsOA==","shasum":"33c18965a42e629ac00de188bf865ba910b01604","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.46.tgz","fileCount":21,"unpackedSize":44302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdygzICRA9TVsSAnZWagAAs0YP/RRwwUfL+Wh1/mzP3314\nOLw+ttgsEm+EbL4lBav0NXoxV3wdRfTqxDfvJGEq6Apz96U+dLPeFNsvXuZ4\n/uHFfLTu/iZ04Hwg9LVIxB5K64PTOL2Xex26V1HFx2bAwmXLjcGrQuqML8Mh\nKzQt243Mp/CNsVQcjL4dWucStvABI1UjPCtVNkJCWEj4mHEinSL73UL9XqSQ\nEudgRHkJtPTnjTtE/rGruxFhTV91mMzfQd6b0TB9CZaD8GumWVJCKxcfyBTU\nmVUGdHDrHDa2KDbDTIPPEiRnyNuoRLTDPAW4yoUpF1tJdmhmX0o/9kqQrkDL\nORBPRWIxLoXfBiU3NoY8Pn6LbAbVFCieZdQ8o3eCoGQl/OweparBzO4qMM7K\noi3v3u2CPaqS6kLD+FPwuYUwkRLIhK2pMP1KS4GZQPQHLa04Md+yLRBzScGS\nFHwPiAfi8PqZPVM2PcAT/8xwrBOQ+A8shq6CUjpoZ/LlSOgJvUyBrzB3tVQE\nEROqG4LZWe5gxexWppv0OwuNy1y7qwd4Qb/aC904uzChPzoioHE6FxeAwnXD\nK0ZWf7ZG6E2WPNHk2kG0K6v0sSTbpUlPYod8LSgXUCngKDHzGCRY4BlKqUFZ\nXNboAtVqoYhy2Sb1ocvbOx17IJKUZlDWtoslWOaWV8CvoZkyl/NwjWQ6MGkX\nKXvB\r\n=4lhF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICzVeEMvq4slFUyBu6FL8c6HHR4lv+rsbqdd3F0m7qOpAiEAqEsxfU3zsXyUgLxmOdwcfgkxJeS5up6FAFY8uiOjPEQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.46_1573522632560_0.8335874416260229"},"_hasShrinkwrap":false},"0.11.3-alpha.47":{"name":"@react-ssr/core","version":"0.11.3-alpha.47","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d8b6cc35d7cce62c39a5e9d7770705128b83edcc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.47","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-y8lfDOyXIFWwpyqDKP2DKv0KjahnYRVVKudua98WoY8w/D7st6YThINEdpY+v8wfhxeamMWyv2tVWazis9sEBQ==","shasum":"d2e83fd560d3139f6be63d7e95d799600f44b44c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.47.tgz","fileCount":21,"unpackedSize":44294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyg2OCRA9TVsSAnZWagAAIwYP/jqGanpqJYQn/dG+RPf9\nRl9/2gUepWTyx3pYwlyRnd6VU3zA3vle+mgy+frlTGkbZDhvSaPANJX7w5Vb\nWLQp8Tp+OlggVIm9uwtnrruq1EclPaln9HjqhQ8NSY3cCMT6JgtWgy359sbc\nytxkzQODW69AOorG+XYOYsjmZV/EfpFwaIhStAV4DAHQLFhgpJjB6oftrbVB\nJ5k1rfNgViAJYD5ehBs2UvpHcjkGktJnXgON22y1CkeGEmddD9MozUfnfEIN\nAE4vHcCJEk/Es3t78fpFzoKEew8R349f2CKBypG1rRVZ/XF4SV7jJt/iXX4l\npWPNcWjA0POCWVye5Lxvz7/7DIgBaBAgpAjM8DQT/NndHF4DDNI5rCtKfP3K\n4PRHSPAwaS5D4CUB512tvnzshApkxWtZY7lcZ2A7HoQO6Dm/2MKpc5xkBm1F\nL85/6vsQCLyUXCtXIvn/Q3cABS4EM+5qFQIH9C96GDZojK7T7aZZzXBRhLyX\n2ckviKTL0yBcUqWtqeAz1szQVwlpfBcIQelWgcWHONMpYiD1qzwmV9k5LK2I\noj4RCn8/ZDmhvBEhC75dG7KBNL4SzKq6AL4iTgoPpS8jIwDguIISsuBMjzb6\nxiu7oqQYRSY/8/HKpLC65p1jbnWvWKlVCmIGZPn4DcazI4QOJY0+LXgsJSEa\nJr57\r\n=3rcQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0IqIna6UJlvOQ+dF9Pb/VpcSo8dx3MeCO3Bl2vATXBwIgWx/cFLSXqOGUGYXH1WmBooysbRBu//RzdjWu2aJ00V0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.47_1573522829539_0.11307043349346291"},"_hasShrinkwrap":false},"0.11.3-alpha.48":{"name":"@react-ssr/core","version":"0.11.3-alpha.48","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"fb3f2d390da7cef59e206f190797e8f69d4e7b09","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.48","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3b4YSghETUdTxGS82NPvCHY7U8HX6td/0a+swnZDqJvs6MkowloMEWbSSqqg4ERZFwM18zGRf+YJylqb+DqZaQ==","shasum":"ab9bfcb9346fb01973e25ea14653e63485faac93","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.48.tgz","fileCount":21,"unpackedSize":44430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyg6pCRA9TVsSAnZWagAAM2sP/RV2/7BDlWLQo9MncPTj\nubd95skn49x4DajEfPOdKOaWkuWwbjfyVkVY+1vzHYemjOs2ftri/K3OCGCS\noa+tvi8ifByuN1FRUVyHXKkFriiEjoH0nd4R27R3oXpIyKEcHYwFYILHzNmA\nEI9Vn39xlbLbWSoMu5jmdGQ5xJWtxOWPD6hv2Hwud8fYr9guZmNpZVSVHRP1\nfTfCH8SU54e6hq0oO8DsJmVtR9XKlj15eZXsY/1L1YznsQBSR9sOM21nSS25\nCoOWmaH4BVAPCESdLjatiVJk9RU/ot98Zv+0JsWRn7LI63T3Af8aL+WAvEW7\nEtLIddeo6zkxfSZo0kYjX9VChVjDXLaPnBYLQCy926rRRUWQ20QIDbg6mF7/\nyYiMzLH6lF+mFzRHgmMSpd+A0TozWEKc+z1vGqEEcEWeJs+ysns6AHI/js5s\nzJm5NxpRwBtWS0d6LlOq1TlLEXCAH7BqjYLGic54cb1/6ii/YWjJnGVbMJN+\n8dW4n+D2Zjyol027tgLDzioD4r/jb6MYF5hTLrRr6wXp8JDyLZepglOrEYmY\nto2hDVWwROFj7g0YnxftoSMe2uNRHD2PVL2EQGdHQn1eOAv8s/T80aTeOlQu\nHAQniCi40tjZ6SCmkA/xc+F3nikniNFOLMwQl2LF1CD0HHaSjmV+EoiKRtuz\n0OfY\r\n=MPk9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD0rNJCL1rz5mTwIaXPpG8XgHnVetm6rWaNn1r4WM58AIgR3LNl/Vziu3VDdqe85LUonOUg86ig1IgYKkLNvZ6QWk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.48_1573523113374_0.2039579828401148"},"_hasShrinkwrap":false},"0.11.3-alpha.49":{"name":"@react-ssr/core","version":"0.11.3-alpha.49","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3fb9df8e3ed2733b9883254444c172ae13ea77ce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.49","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-bjYWayMYJpD9U0OJvTW1y8rBqUb1UEKatD63RM+f9yyucO+Jszrz/br75n3LEIZDihtvHQrEKBybewRZqJFkdA==","shasum":"c656e429a5fa5260f4f94c9f2480a16f199d683b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.49.tgz","fileCount":21,"unpackedSize":44411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyg8ECRA9TVsSAnZWagAAR58P/1USwX03agJEzHUlytwQ\nJeVNMVZjszAwD3tZTdtwaOjDxxFLJC/nYoJdVhQtXL0e7iJJTkJiw7ItTVlu\nznl5iynXUg3mqLKEC/d68WyhWg0AeDdhpKQ6Q4JwoUCIxDG/aqF1KHc52zfh\nrH/Bg0KFI5DRp2oj9R0lP2C3pZfBSUxH0JsGadVH+JYV63U78Z3fZQUfgkw2\n+upRnMyjLDf9B+AO8E+IyJJifSfH7HnzQO1MzPTp4MYCQyEiPBaYDBxMPTG6\nsGjE8b1CNcep8VRCbMewk2vDshA4syuwt0w+tPIAt9T39rJJwpjnBOk4N5LN\nrPDa2Qehod2CaEXNxMvWN6z9OFTGBQ/72FvSAVpTkyFUehutt2l4n35iZwQm\nxyAnuVmnHOh4hMUx5UvJnX/qjgpDkm83c7lBQtzSRSnhDh+0sRonI0WUiKfo\nMfnCmkMnV3ylXEPfmoMfmdnGn5xDd6KRKenjL8u/95ebYDqCihNJV9sMmTDd\nWwpSw9eS/orD4IasE8FA33ATaBgPmrMSbdvLl9mkksgM5weqsz3M4HDpMvIM\n46GMc1Cet8GW4ntHw5sazbtDnxfzKNOfQCD/b2cAl84ycE3ZfLkPA3NrVYrp\nl5rBG1hnMhhSkrImsI5SKHVaXe3a4L6PwHNKBLEvsDCaqpg2JvU+zHZG03f4\nborw\r\n=r2au\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEq1hef5+Mo4DOje5781Y4ISSqP9gtWCkoAb8W7Y6ahTAiBUSOgaOIw9xVoNUGXHJHyVw21o30PJlwCkaqsB6wuqkg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.49_1573523203936_0.6997030309185879"},"_hasShrinkwrap":false},"0.11.3-alpha.50":{"name":"@react-ssr/core","version":"0.11.3-alpha.50","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ea37b569782dbd708c369526eb57cb5695e6e3a2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.50","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-0mIR6R7VhOnHruQbHXcx97x3d3Psk20EHAGbBmD/Kvxw84cW0y+N7U7JffpSmatQpkWeXvHPahBJKmRzcDLJ7g==","shasum":"6bc9f0c71de6bea7fe92a5fc1f34033baa324d2f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.50.tgz","fileCount":21,"unpackedSize":44345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyg9DCRA9TVsSAnZWagAA8nQP/RKDnaNWUvGCMZKtg1m4\njHm4rWJ1i7RYRz0CbxqcGb2GUiRE7MLsSvtZuT0cTdo30Kr0d+pRBZNXuTE/\nZ5Hz+US4PKSzRs0OhdVbX/nDKvzqkLvIPZOl03334NDKeEGWU4DQGiBqAMeA\nBmdbvIEC5V/yjDqDuZwB3XyvdDQfiCn78zOK48qkPBmSjXYxFloZECoEzs9H\ngR7sEL/v0XkQ4SZxjzgw8Pl2y63kWIgSbCQo6mpyiFE/hubd58L4fTwarbZ4\n5F4JdK9Lj7dI5taU86y8S1Biq1t5iQboqMlxClVoQY8BSp04kBl+1c0Bny/X\npDUllPZe8545EaLB/r5KnsmfH4s3+6mIYHCC8je+lMuwvMs4CtUCvWggyJ2Y\nUTz0uvzd5IJYqQOHPvagZLVFIGxDJM7l5S/VGxHc7FPe60V8AQ/P4SdtWlz6\nhESw6HOq2OCrOjW0OXQvLcAyf43F4roQZ09pow5MJGV3lJwCzYASzZLj/oDg\noToDSXH+atiz+rEiD5UKsryYoI+ST5DQwwc6YZSaGtFP1LUj38Ttx914Qx/K\n+icMTHJ2USfkuaMd0sv2KPejCxvFAuLH3tDOqncbIO9VQaLFQYR+3gocuqJ9\nt06YFWrI8d9VCoevhI0QtSo4CZ59lcjUnY4Mj+39YIhvdqX6y3eOwmpMxcvK\nzk1A\r\n=szUN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoWDvY6frGIcFVy0sm2KepxjH/JDE7IB+RkUUW+x6viAiBbAOUcGiEUta3XtPGvlVDDUZog5DeazgGW2n5G02srMQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.50_1573523267554_0.6167960209012091"},"_hasShrinkwrap":false},"0.11.3-alpha.51":{"name":"@react-ssr/core","version":"0.11.3-alpha.51","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"09723e54aba2104fde03ce731dba546b562245f2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.51","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CKG2ueyUQUS3r6KGCXwQeP1BtACRRAifmp0LJcDNSafgTOU+i96jQJM2RUy6z5rM/7O1IHqxFGXpl7PkEnrFnQ==","shasum":"b986d3d0cd6d1385fecd396c3337e8781e3c3850","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.51.tgz","fileCount":21,"unpackedSize":44340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyg+bCRA9TVsSAnZWagAA1UYP/0rF1UGS25b8SzflIOlX\nMTKGUV8e2LRtczDib1MIm1CJqZXRBgCk/d9ymZIBjw/WW9ftARtkIrRB+Sra\nxBC/+nFyf5vMy19XQR+KJ4mAAa7+1dA58yjdwlmwLdEkCvIj3hBPTBRXn8cp\nB9DvmlpFWFKCa08Xj3vRyIVy9PJ0mfnLw5BHxlpP9buONWV0D2MV27TP4mHR\nICbV9kFCOjGlxVjGiQSllu0C6sHg8lHd9EddUvtQwaEEgqERf7l0KXB6mrzq\nfmloZKDSHqWCWQIc/tr+GuG+TLNLv+2TBK6QxC8xqfU0h80PBOKskLB+F2rz\nldYzEo6VrciV+hSwMuJVKqHfBJtDprRto1qlFRh/kas6rjL+YhA75HVHp7ME\npxfIV/SjBwtekCx8sRugp+k0MdS8Ivzq6lHdI4FAamUlnBH7bG+Im4Lf/EWs\ndcm1nHvVzi1um3tF7thfYP8USVzV6Di6vvV1tDK43D0AKaRNvYg4SO0wjlDs\nXVh222AHNconBtatyFrVNGvIWRRU51AHD/5nwEEyadf6J5fUb8/JmCh4lfQy\nSF+QG48hNlPZpn00/8562/V3yoD3/GSs4TWfzVQBEmT6UjgnhdajoNTFMI3Y\nzY7LsrTDKeCLoz6KgHIqcfLu/V0nQ4UFET4RLK28V2GYLUDXe3KJS+nV8NOR\n9uya\r\n=j0GH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVyZjXZTZ43CbX32dMYUcoWcZ/bm9lvxq6Ug3Exj3TxAiEA3k+Pjz1nJvfEPntYDCfyvGVh5aAi04W2OroCpfHz7Vw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.51_1573523355003_0.2912527265119218"},"_hasShrinkwrap":false},"0.11.3-alpha.52":{"name":"@react-ssr/core","version":"0.11.3-alpha.52","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"70c5727fde67cbac9724df978f1b2fbd76e42f73","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.52","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Mna/bBvMO/YsOhIZmvotWzs1GwEq/J9h8cbevRobGJSTOhXcqeWFyFtCQUG9Lp1sZvUDl/TM0wI4Uw0K/rI8vw==","shasum":"ac9afe0424169ca3a5bc5bdaeb005b625480b58f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.52.tgz","fileCount":21,"unpackedSize":44762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhKmCRA9TVsSAnZWagAAX6oQAJKIgYZYMviVYHX5Kj64\nbJSdImfkg61Wlo+3wIHCmHB8vR4U5E9lmnvu5Kj3eh7p61nTC/+xH7MXG7Yy\nZINn4o979cI/Utm41ClUhgoEaLTJcK3HrzQN/MkoIw5Srm4ObQFn11qhYB0A\nMdOXcnt+90hDuNfZnxZGdG+p5zsXEiJ6POfUetx81m2txkXIvB6lFS3+TGIF\nTuZyWQq9/m6RFsaqxwlxBrfq1zQMMa53s8KTOmJi12P7xmD/tqU3WSO8BAff\nvuKaXGMKOCALzDYgTzoygKrbcfllfItFzA7VDVZ6hzquKFVTONNwjRTQ6Iy+\n2XKQlV8eZmdCI9CSLR55eXr4kTi4CwBj0+K3qAuAmrsFpzxgEV6VO8c3p4g/\nWeoLuB7RuATVLuOHP1HNE0ubHpfwtDaz9q5yW8RwUQasuJdkiHO3nQyPWlPk\nZ/8dmN9MRxnhxAb1AjzhfmfS8Fwkq2IjZLZoU1I79eKtlVs35Mk0BJF5QPL1\n1vkYD5Y/dOL0Y+h32XlZ+sIqQ9SpiUDg0Carf/TSET/gMHg/uw894mPbB0dr\nBgswGm0M8y3kQ65Y+udps0mZakd4rrE0T5EmV9FZ87baVHXUHr0ccolG72Lt\naiv1UEjdZ1SL6z4av19oiRD3EYWeTy5EiiNVwibh/tfu/3S+Nt4FCszop3zJ\nQhcA\r\n=dwLj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFsEyPy9CtZrnhmwjI3SwEG/l16aup99UTqMHtNh52dQIgLfvcYgtoDgSSKKOLgu0D3lz17wVordXRdirdIwZNyKo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.52_1573524134093_0.9296040364512581"},"_hasShrinkwrap":false},"0.11.3-alpha.53":{"name":"@react-ssr/core","version":"0.11.3-alpha.53","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0afbaaf14bf2f66693078b1ee5818eea5f6fd8ba","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.53","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-elLbATt1IqAhpysqz1wiHDDwwWh5tNETISLOGXOdW1K9IVYzk1ei/0Kor8x3NPiGXTSJJ7k2LJ6CWuJSQJa+aw==","shasum":"a5bde677a8af1085fb7eb394300b9bf49905f49a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.53.tgz","fileCount":21,"unpackedSize":44744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhMtCRA9TVsSAnZWagAAAAIP/A/FXqLUP/du73TobuHO\nKvGwz0KzR2CxIyqap8qW0YQY4KwCQIZt/yCz9ybrfXehOHlI/08eW13k9yke\nwDFehubHa4fL/OzCjpuZj9CwQyZordkeWHUGaT7O84qlPxTB361pxHaTBV7X\n9yU0gyjrkD5TCzU6X3TK4CfmuF8F2LZTiLUg0aF8LvmDVCV40GJji+nSHViw\nYsQmUTN1ULmhCr/hTwC4U2JXnp11578Q/sS9/aamJ1KNJkCkQSLPp77dUL9O\n/AovcttfwD2Oyvd5tArME1mTFhyLYbcrdpargmKcYwFZ542vKYZlqXlcF9F+\nXGOsOCtz1hw6519tugbiBnEBbbLP2qv8tdPyL/kWjS2bN08o+YkpZ00tU50A\nUKhY7SAJi3ro+SoBnyafQYJMJm7O1y23wqey2vY5h3ngPtibNc6z88ydEoFC\nPsMIiocLmCCv1bQc4Dbx/5u9AlOuvKQdd0as1CP8kb9gmZJuWJwQei1ooIY0\nSfvUC4zd2YNISevXbdjkerT/mmw5at2TGB5aKR7TC4gLQlHICGE4tWuM6EgK\nlpefX7gSsM5lNWHZhmr5I2td524qbcxubtUQ3xomo7Ui/x9cvECgVs0xRoHY\nQ0cxj6J2UBhgZEaJ2NyLRMzsEoZSHNhWHK7C5duK+RmWR+/bmYgG/uzMUg0r\nxKpt\r\n=iYE9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLy25cti2ZQqUwscwYGZ1y9B5eH2nrlzvGybirRxYMUgIgKaEgXZMfD4BspnGurmfCtQBjpg9ZX8O2bQWPwkHyd6E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.53_1573524269464_0.23131438838462914"},"_hasShrinkwrap":false},"0.11.3-alpha.54":{"name":"@react-ssr/core","version":"0.11.3-alpha.54","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ca8c581edfd580246359f2f555618f1c6178a240","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.54","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-OyZ4LDmX4kjFrapylF3IB9el+HFNV1ShITb8DgI/P6nREMDWwuI0rx0Mh1Q6IbMy7PEumhV1aoCnH+rFNv6ZAw==","shasum":"1cd539d3b747e47aaaa2a9612d799d2300d05d52","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.54.tgz","fileCount":21,"unpackedSize":43725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhPNCRA9TVsSAnZWagAAXywP/1tHSA+7RCBXgVQ9+VIK\nocburIk82ozMqzGW1xKQ/GhFipWnXUtCR9zI8qRJrPFxw/qVfg8DlFeT3xxG\nNdmvw47luCclxzRe2+9iyhFWUFfC5MMegu9dNcxjviAANGzarRa4mR3/7wlx\nw7V8bFLAtvLObApswH1dPwhazCozkgIQCoLJ6WleEnAY3c4wTG78vlpvtYuy\n4Pu+FN8b6Le223d1fIMdw56qW0sUaoDzDZ/sPIjAtBX23dmZx7t9IK2XdXqW\nG0oxPp96fpeC6kY19DxCiHX4YTyG2T/wxUkBSn9FtihlVmXSoZ7szyAvXADN\nL+xyEkqYEv/+62VWk8rX6kJbtjq0FQ0e3Djpx9Z7GSQmtQ/neS3XIgJJevi9\nmEja/mj/V3CUYT87ZfXJKZw7ArYLVLmh0fuNy/M7MKgh6vVwMwOuLweczjZV\n1wNT9eNSAwCheJ81GOee5iPCD0jK0wzULWQrVkZEPqgABRHaZwPZPw/TF/lr\ntbtMPsYFdyGaBP2QKOwgRM2g0RX/+OtKg3v3g/FNAIXSrKpKfAmiV38NuU6O\nIZB+1gwU/LIBADyC5OBwbYUjcvXWF1kKCPMz/csSA+ybbuJle0TFc+KqInS2\nyNSjujPbgDFumun5gmBX5p1wRanX8h6Pf39fGod++UFmDtOg7Bl9WXChASs8\nTXH+\r\n=wjQx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUPO2ESlmZRCx/fjtFqNkd3I1QwdSDXLqYOO1TxvfmpgIhAMHnNTWKKHwHvU+jfFuE4f3NvfrhmJSL4LiIMfelHCp7"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.54_1573524428989_0.132206811328905"},"_hasShrinkwrap":false},"0.11.3-alpha.55":{"name":"@react-ssr/core","version":"0.11.3-alpha.55","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1bc506c19ff53bb6cff68910dfdd70c83eb8b842","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.55","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lNvALHyEATdyDUdpmr6IYWv1TuJ5VNtZmaQwtCbZYi7hjkh8HUAx/4HXinPOol/+a6WwiSzNkcUiOD///MQDWA==","shasum":"d97e60853f374fb5a1c87a58f31ebec70ee24b5d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.55.tgz","fileCount":21,"unpackedSize":43754,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhU0CRA9TVsSAnZWagAAK1UP/jT9E3J1KzObpEOlqagC\nfNTjK049BJFGri45p/zqjo8sZsuJaDqpZcngN7ONysKOO2rOQeZtwfaqRBYK\ndLJEBwm8CHISpm/Oh9Qo61z8ye7BLNfolNeX6daxCbrHwJOHJxpIHol25ETS\n68NIxYH44H5Yfghi3sStQ/Is0LhhX71r61ELjEo9fW02CBwts48FAg6rSB3X\nzitm9kRC52+EHXKS2dKe77mXrO4Y3G8ccLPn6tf+lBKhCeEcRITKlpgaEZxA\nQThTe3adFpvYh4hbL4MWj1kUc+OBZlTCLvNFy4sKmUfKD4aizlpkBfZByk7z\nENg5muULGAcGEEpJHu6/c1vh14eNtuHk++iFRU8ZANUrLUL6kAW+wvj0j6i2\nJi3eeF3KyuZ6Y7PQKonWnb/x5Ks8Tx9iPXV4zZL2DyxUva7yO+d8V142yNVn\noaa9CrDdPzZ6RpC+c1XCwEPSdOPO8g0ZeWqv/SO8ICfEAzQA66Ac3FIqxKq6\nBUH4yZwaUwn0F98zHEA2ZghdvA2xrpNipoEjIWY8jaxwA8cVfYFetKwNLANv\nkHPJ0PwyIaPpDBJvw0yFQnCrPkQb2Xs4TtFCuP/RqowK5G8NrvuVNP/pprVB\nklgplGa9oSQHWOAFBHZYPn4+w3LRtndvUR9Z6EXwuAMT2nYg2+hYdVKzYYhv\nmgI1\r\n=E75V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGb2oyI2Wv3jNKqTc4b1Sr1rTq5u701T8Wt0soAfsQeQIhALCOXJdNki9WbxgYMFzDIi02BOIqo1E8JerKlV2DLFGN"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.55_1573524788002_0.11127600401171245"},"_hasShrinkwrap":false},"0.11.3-alpha.56":{"name":"@react-ssr/core","version":"0.11.3-alpha.56","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ba68ca5a1e30947e7d7394634e297bc437954132","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.56","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TE4WFR2nxCx3OZdepqdNFWA1r30WKfV9RlSXjeWMs/i5VIUhGscBxX8Rvhf1NA9YPyPsh8t23OgnDMLrLcF9hQ==","shasum":"3dba52a516ff6a073e2f596344cd5e51b41e29ea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.56.tgz","fileCount":21,"unpackedSize":43772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhWvCRA9TVsSAnZWagAAwaoP/RiJ4WOU69jLx7eKOoiP\ng2S04yw38R6X/KT4lEVE9MBOnrew5Aq1USN7k0s9A1Y4TBspvUFU9J8qIVPo\npJKQ3CIKkeCQNoCJeyZ4aEcmu8bHc7ieZFkYQPv1ZnbA2LNxE+LZT2TGNZe0\nyx3wBVmAybj387MBlojjGt7Zu4wQr7TuYzcs2LDKPnqJgtBcDZAujFEC7pJK\nUy0xgsr8sblHTFVALpS8JeA+0oY22QXSiAts0jJdMBxUeXYghCG1I+HMI9R1\nD5Ihqfv+hwbWHOx+02lWflD4JSA4cusWwK8hDGMxCGXIyZSdAeA8wJ3u80WJ\nJ7YdAMvCTuBxzk6cHSZG6yJ5cG5gbdRLrK/WX9V3NodIPMS67rS0jGJCKi0H\nZpPtw6Oqfsw89mRVdeGmMCiUkbt78sju7VX1Ff6fb+Rl94SiadNwZF2ICxM/\njg6BNlCVvPzgq8rJCiOhfCbDAM3QcRzE3ydCprWn4+5pdlFpHjZhfzNaYrbC\njG4nc3FBHwlXQHsmJECokxuvTc1P0PK8zFuiI6n/tpOR8YI3OekdxZ2iRqNZ\nN/kolG8RT/sWGXzD2j9Kx4IVZgC81nEK2ImQB2TPu1TjicM1f2NWmUCaXl7L\nloPAvLcNUsnZBHZILNKb1iohuWhAgWqnBC5eX0IJq5OfzuhTe03xyEPmApRJ\nEFtp\r\n=oyEy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtoT1UuVdJD8lvBmid36/dU0fCQTm3HGOdoaFLqYFLQQIhALXHoXxe4F2wH79No5HG3pC3nSUx6m/XHKRP/PpYts/3"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.56_1573524910702_0.7518440533396296"},"_hasShrinkwrap":false},"0.11.3-alpha.57":{"name":"@react-ssr/core","version":"0.11.3-alpha.57","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"02dca9f2e3ed8ed97cb1a4f1556ab2a57f75a1f5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.57","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-X39iP8H9QAimFT3yJgQm22Z5ObY27qrcSR3mL5plVPjAaIPUQJPwe4C49KlUOEQfLfrTKlk2lJi3dDivv+rQ5A==","shasum":"f08fe407af3bf974b3bf4a6275b489c23bd7a4f1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.57.tgz","fileCount":21,"unpackedSize":43814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhZVCRA9TVsSAnZWagAAfM0P/3RBYg+kDQwzVZQkVa3C\nGfLVsZ2joKl/K9xnnPM23nyn/uae/bYg502MEs6kKG/8d6X+St9jW873njYn\n1kaUKV8pzllbwztKXMRBn4hU23cs6wE4rDaweKlVn2JQQSYhpKvm6K3AFq6d\nv7xd82nIIvKuOPKro4cctj48PYXbtj5RE/22IGNUKO8ZTDPrLFgOg85QP3+J\nlVM3A2BAW8hk0LLVMpZrrberO+D0RA4ilHKTTkfTbt2/1S1gli678FoNdH6n\n1LwZCU2jm6TN7DBUvfrTxkgh8JOeXe8VVp+Atzhudt5SZ+M4ukca6RiZX/Hx\n9ydG2jvbTYyasLb49E51lAGh0xs5yqeJtnoBTfxQErWZVRG9kwtOH6AF3V17\n6ygwW69jNmqkiWgS2cgbpcAkIBJZvF3TvwuiF0s1aE8CoNdVeYxtPgfgkMiT\niqPrh5C6MEQQWOCycKcwVxVyRj6VI8mElPP42IM+5AmJ8qoTdB4YDDKCXpx6\nQrp4DIh3+AzyrlUtVI+va9mPr/UJELTxKbknO6VsMXVWHMFX24k2MReJlJCS\nEU4cvazYHQiEpuDL8mqeAVzS/QpIeq+STfeayWireZ+Kdp4OBFS3aNpa35Zv\nGfrLSkJUG34P2V9KIBtCI00QkBMSKdflcJpAO7on4un4CiRhri6fay4zZ35b\nwsja\r\n=FU2S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXgs5fsT20aolTNHEW7aXHfb4d9jLI9m1+y4VLvixJRgIhAINTXbtbR55o7E5T56YBh66zXfqpfQn2oybZtsT46cMx"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.57_1573525077294_0.2462801812317239"},"_hasShrinkwrap":false},"0.11.3-alpha.58":{"name":"@react-ssr/core","version":"0.11.3-alpha.58","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2c03dce5b9801dae77ff0720db3a59ea4f16cbd0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-babelrc)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.3-alpha.58","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-renuplQ5nxOoInq0lb1RR62HpQtfXZ/ah3NKhia8c7ywVJtyIRcoh8cRssuhG0TlT6oxFKCLiUD/mnMa4NuwIA==","shasum":"5a1eb5027a350c90897407a5a8d73c1d737d99ac","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3-alpha.58.tgz","fileCount":19,"unpackedSize":41944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyhnjCRA9TVsSAnZWagAAxTYP/jmyKf1VonH5K42gFDuk\nvW/loqdrXdvVxjWQkVDZ/SJelIg4fY4wAaw2eiwqUNzLNUzpd1zpGydZv9q3\noVfAvVEtNtyyCUOPFCurKmofJ9M7YpPCXxi1exH1i/YWfE/ILEkzSHlvw0A+\nY2n1BVJnCy2jwxjZiUNioOU+YSMfSg3+DDzEXZJdxGGmiJ2Ute9OaQU2NigQ\nVDfQ1DqkHCtIUPHsJWasmmj15dVHJ2K6RjoR8yqd6XhXtKPUpyGS0sT9EMR6\nAMlC+88Q27CmGSRxFzRkRv0TdrIrsuw8r+YJRWlAs78NIFAEiERfzfcwPbRU\nNNfrTJjHcxq7SKBVg7fYQ92GVgtqkmS26cGXTcduViMT355dujM01x8jASuH\n5yitc/NcUFk/tFh8srfRrEkc4zgwzZ57DHpPs9V03zV9LFGBzCfjSmVk9Y0v\nNW6NcZ0Qsogcb/tgmGJasN+dTjx5CD8p0L2YLQ82aIgVCjTZuA2HO3df9uCD\ne0bbY0S9yLAsH/gqThPugatK/s/OYRquJqiqc29y7xTMfedkq5Z2+qV78v8Z\nKb3YB735OAWxKyC21b4BhJ+xBwHKJMXqC9QsJa3+a09oK+txv7e99tdW8FEe\nBWN+5LlXoFXzJDUuxKgBdKIJwO+3r07sEvqeMJsfjLtrPBxaWmr5Op161qXK\nsc6b\r\n=kmOL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNzg18h5VOf8DO676ZwUcWCT2hDnxEGrSRJUBHa41t4AiBQxxGUGH/zlQJZYl48Xz/AOKXw306Qy3yRU9/KUh1gPQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3-alpha.58_1573525987133_0.8449605244409031"},"_hasShrinkwrap":false},"0.11.3":{"name":"@react-ssr/core","version":"0.11.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9b015f2dd083946b82b6a4f1a255c1faf55b4bd0","_id":"@react-ssr/core@0.11.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-CaNM5C3q9xECg1CTSnc0P/pZZ5h3+QpQ29cDAmDGrhpfOgB2YWUnPmnX8GDipXuqTWwLGVcEfeFq60z4v9Bqzw==","shasum":"66cd9a9fc092d6df29718ad211ed67fe910afa2c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.3.tgz","fileCount":19,"unpackedSize":41997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyh3vCRA9TVsSAnZWagAAevsP/AwgjsD9cWtrBqv7gvA4\nK1u2MJrTFzusnWLRF2FTrucfqpqogsOBVnCwL39UGxGE/2TR+6N1HhtrFPiL\n4t1Ytbtq6DbgHuQ51rHMOLsOW3Kgd9IcH3jU3V618/a9zzN6RnB7dAcI2HXr\nd9WYhT/heWJqO16WmluMkvyDK3wzZefiSQXCfxFCk7P1zxbXzJDnC8Yne7d5\nRBkA0jEu08XH9W/tEWrYiE9FSsIM5q2k+dx6/JRIW+pmjmfwXT+elEfYXH2u\njSlPzqJhOyG5VLD1IZYeDgcm7SnsQ97IMzfwG08a+/yzNlBJYWQbntYY4hJU\n+Vw4FsSPs4dJPZcTkCHInxykqfJfPsp7ZE2HTzyNhkqiCBiAwKxOnCpwbLgF\ntV7/CS2BpMX7t/BcJRWeKL0QTjg3yD9QRVyz//YyZWPt3Xh7z7TYb69d/gAD\npoDJon8KnqZKFCFOBTm41/iGR97f4AS4egwyoGbdji0XDQ+WdL3QhBxVBDgT\n1F6UjyoLbLFrUYKMgy1fd2te79bGkVnyrJzQM9U0+G/cDAp7i4HkBWCqHZVO\niJMZwENgMDsVTnxEUxO5czkBnzc1oMIagCU44kAMIW4RuO96slwCdfBtmGQj\ndeOTYCT5soh8UadZlDxk36d/pNlujbqnt+pZDS0xrLRhFtl7gPbJIBwcmmsM\nbhl1\r\n=Zbmm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBiZ/TiZXv0ql6wiG3H760fLbDQi345mdWk0LCqwKD1CAiAc+8e2WormDBGslplv8/ltAMjJC1s/RQNwhv9cMnUKjw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.3_1573527023457_0.9658923560237576"},"_hasShrinkwrap":false},"0.11.4-alpha.0":{"name":"@react-ssr/core","version":"0.11.4-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d07fc4ebf0bf796042e47e362aa908958724b8dd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Y6wPLnioUfAGGju62o0AWNqW2jvBStalStY/bjiEjQoXO/O7zKx1KoomlFCjAEoiFPriOASiIcPpFnrJKbhRtQ==","shasum":"4d8c898d4fcc89c6ba357693d577bd8c3cdd4309","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.0.tgz","fileCount":19,"unpackedSize":42046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdykTiCRA9TVsSAnZWagAApiQP/j5cyqmrRRzSA/s9SDO8\nCvEbfQsqZo9Ne0o56+DHpsekGk1UhhT3zMvqjlFI3WzQiODbmyqavaw54mN1\n5hiC4BjXBmQbKtiJROSiWjQhaie56Aprn+orJj/b4zYyMd6AcLv39t/tua6M\nGIvO1SCRXYpr6NIjR5r0n0ix5BiNqWC5dJCdXQNQr5XN5gPxMJY5BXPRVkax\nv//qSrbgW4ZGWcW/NQiBczoiTnR3XHRrIZ6RP2ISYmFybZ8LLS3JiWlsjhb4\nyvB7rF5INh7BvfYqLegrn7oagvzax6Y2CuiUGXYYgidOJAfDZHAJ/R2o8Okb\nTjdnfSs9PORJJlisvTXX3S4e+iZvzJIcJDkre/NQrlmq2qJ+ksp/X35XA7qu\nXR6rUJRnboYoYtEXV5fNkVAbKyQ2jjju9g+Kp1+a37VoIHfxfqOegMT27lxU\nVlcCjmo8ZZmBpJz3pjS/BRTN3ZsrNH1xaZ3tFYsOO93OC1/Lu6J4OzX2VySn\nVvm6sWuQTFm8cry21y9GWmxbXlyvhRHQt+gZ50pVNEY2hdF344Ejrwc6YZr8\nH4SJO39aFVscpqw1GWDeC5YMJ0rejLOZ9IP5iZKarz0VKTF7dlv39vm6hiPd\nfBec7cM2++MuTT6G2zTVrf+ByNdOod92VU7O1z1mlNgqYg67N4iYVCAwxSGs\nRG3g\r\n=/U2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5ADtGBGaxiAoIpaMJaZQwqLiPIA9uDPJ+9MpPcsosaQIgfb9IKocc3FWAvc3tz0OI7jFGHyZM0cvYu3MdF1tiBfo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.0_1573536994151_0.40938653533965597"},"_hasShrinkwrap":false},"0.11.4-alpha.1":{"name":"@react-ssr/core","version":"0.11.4-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2da96c649131b126080fa738e7bfc6c6a161f612","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-W4vz1fvsa0Tb7S36cHhRHuQ0W6woE9ytbiJLBbhF9xCMoyAjF9MKd9wJV37iSiUf7xw0yVcMskHgVXIMgX39OA==","shasum":"cb55e61d0a5b9bb808a55bc7b5f545cb0236a03a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.1.tgz","fileCount":20,"unpackedSize":43384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdykszCRA9TVsSAnZWagAAYYcP/0szm9D/c+mnqDxINlZ8\nsvUxEvfKWuHxpmt0vsZ7v86PXpD8aLyJG2VFU24sVTA+TA5J4oJbU55qVbS2\nst+FnmEXHgVtiZuktR7EOjsHIpGscwa0aBzd2RUR/gjCbd3a8ptdwpfMgyFE\nmgv7J4xN6DEbNar0fwBtmRoGOxcNWQcYMrSWD8fKDR/hAjM+K6e+xlsLZPKi\nsoZnRrZsduL5dROYYrRYPwjopGs0AzJnyfQeUrZ6vaWBmDJXA411WWv+hHWN\nBgc/kWmpZgUXQ/OX5F5nL17KJDmQnCLdwUup+bp69Btgpfdt1UEmLzm6C4ae\nNg6iUE2YJ/rmPNUm3sImLE5gwXLMXR/4+kzsxJWfi+Cll6IgYaDWhIvSFo0X\n/TciFVU2+dn916UzvOpXFecAhbtEgsmXw+x1UAAhbD8RUOFnC89YY2ivu3x/\nd65SZti7mus7SpSKE8xWjjRVBX9Q2uUXG1bvIzYgsg4H5Yv89pw+yQsP6LbP\nsWAOMtTHmZaM9bfJq6tsAFes9xq/cVFfS75pytjpz1UL0cXlJNXGrBytdv+L\nLysV5/Gq5HXISA9cKZSMAlr+r9OEvJMtuYlx8dSihyBxrN6khdahNOif5GS0\nH9NlS6qK12COca6lhXGQpAEr6DZjSZQyG+fP81ZbqjOJwNL9BrnbU6ZvJ6U9\nN/6+\r\n=j6MX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAONdrQQrJ2R6bxUMOXcTxQPjsuHdqdLbVbnGHNK0OCVAiAXGin+2ZUWo1ep+DyQll7nSGMmiPHOYFHFflCMXIO8bA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.1_1573538611216_0.5718211745859871"},"_hasShrinkwrap":false},"0.11.4-alpha.2":{"name":"@react-ssr/core","version":"0.11.4-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c04e551f3d713464e4ed4127ac37dd36cffd0426","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-AHCsRM85wHalH+huV+F3MJRlyzBATZoN3DDJvXkJjoAcE23zebQtvtPm79YhSR6G421saxIZ2adklC8PLFfhJQ==","shasum":"c14168beeb69ea4b337699fccd3981555276dd88","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.2.tgz","fileCount":19,"unpackedSize":41690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyk5NCRA9TVsSAnZWagAAL+wP/Rvva9Fbu2FdFQSrXNHj\nx8kdRyL9D8vZJ9z3EBE0IHiZPN8JryHIj1ZFfhkMIRlRGh2a/RSPQCE6Q+/w\n8iyHChNtqEVghC2ok4O8svjpw/c8TAqCwxVzmiKzOGynb9X5BOUfjBtWBliY\nlT+NgZ15dSlqtwWlwbQOV1Wqoqo7dq/2bejqbmjJ5p+oD5GgsWcriBEdfwRp\noJ6aRMOOic8BT3jfkA6qXmYqOVNsjEPshKsbvaOxnOCea0i8eWZR8QHEdLWH\nn8/TQxFEHEhqBjV/WhZ5StnQwkaACa3qUtfBivsDqRifolsgK0k7tvJrRoVb\nPz5Rf+BkXXUsLdmj5z3iia7NSCJv6HhNlXcPlzdTOWbI5cXztS8FCQTG7k3F\nubbzt52S2VXP5rCcdkzSKhy1yH75yYq65CLiNVTyJvI3D0ll1eR9oRP5rrdF\nbhsmqj8eH7QF2im2SqgE/Aqrx9iGb5LZOb2JtqDfvenS25axch4orvFilkXb\n4UrvH5ZW2J//0YNSCe/x+Fjv6bmoV5c3tbEbw/M+H8pIg5TqulRGnpwAPmbP\noQi+wvpTWgQ1OhnoWm79a4UFU4OLYKjskny5O//X0O/XFbL0ulcZAp9/mLuh\nTxftCbycI45d09btVMk+vfgmKyHUqb5j0yyhdtNeKExkyyRdxHqXEwC9pier\nQdUp\r\n=Mq8e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDkoGAMpMRD2mzoPI3tcxhytjMlFrdwkcSVOT1JKUWZ4AiA158WSAlP8ILt342cvf3IDa6DOkjg/QyklUvkNHy/IFw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.2_1573539405139_0.849790366772541"},"_hasShrinkwrap":false},"0.11.4-alpha.3":{"name":"@react-ssr/core","version":"0.11.4-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a134020f11044f30a28d7edb0fa1da8e62e18fc6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-s4zbU7qcKHLELzw8sgHNfg8We2GfsX+I/YsOQ6e2rjti0WIPGYZ6tJHKS/FGzsf6lMWjowgP9wKGyjWsmTFVsA==","shasum":"73e084127087ef3523761809417a90d6e3004986","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.3.tgz","fileCount":19,"unpackedSize":41574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyk79CRA9TVsSAnZWagAAHkcP/jbCh83Fi/gkdER9VYcR\nEBe6XSx09Njs+nSgnLSVp0PinZglTodoFnFdmVrNaxtPjnd5hx5qNOySK636\n/6FpiqHZ3GSoBwvmSEz6mMUpstLzG5/uFWcO/trzgV5zdn+y4TYai3mlJouv\nPQH1jQK4YaCCyLeNlUZ4bu9c9hAadoZfW1wZeX0B89Qnb7gSUSX7/teiLBPS\ntYPjKTTUtvQYXpRNKI3dzrZjwEEb3EjfkeYiOfGbyBm77ZyyPkodtt0cHDBt\nyaDeOQTrU3IPoz3qwfp7CKYhhUtcPSo3ugqJu3Au7nekLe+z87G7Y0bS/lDW\nvuhmaaGQ04ePYu9w6Wadq2YG9aP320oj876FsUsMbRwqAvgwhSZ83HM6e/Ts\noGXeZ1ibhVb1sxypF45R8Uh0uPQDj/oU2lMCQI/oN2Z5md25gum+A4QwA84v\nXb7Z4zzTWfngLmxCFm8n4s2zfz6HClCsCN674eU3wlhkRwaQBIdkK9/fwYZL\ndMfd9VGke9bL2W6ljIMEUy4YB7J2YQ81zmcrGOTsY7iP9MWLa9arepfHiHor\nHXLzn5p127IdrTxua4S87C9ZekbEjwl6EkxiJtxUBV0CW70VD+aAaSMZtA7r\nCBj3gs6Tznoay3X38qYUblKHPijrMIlXfz2q2h2adQr4xdDPR2msYJA0f4fy\nQhwA\r\n=O1Mb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6X2j/2GhIoVyxELvPj9oGYbENTBmOm5vlAwUQlvSVpAiAGZwametG+61SbEKKKZ//hXyC43WDXjkkb/V29vx4kuQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.3_1573539581096_0.4721718982806977"},"_hasShrinkwrap":false},"0.11.4-alpha.4":{"name":"@react-ssr/core","version":"0.11.4-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"2b65920e8fa821f5157758ed60550dd6f16d17a9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/ojhliCi+OZmjO7iMnPL+lTiiq3TB5NQkLORnoXhS25o03s03nedm7HPvxVG47Fng6J5jeRkh0XUXeckFr3xsQ==","shasum":"b4d672626a91f03209aaff453de83196bf9ccc72","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.4.tgz","fileCount":19,"unpackedSize":41558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylHRCRA9TVsSAnZWagAACysP/3Fn0NUi+0wdN92eg86D\nzB3aQUpLbv94ooQFL2YRP+zs9IGisL2rR4jNEvf4PuSQ2HJhoW2kMOfsU7r8\nEZnKd23KVtPZDn7hW/rCuLvzFy1RLuvK9qxF0cQBFsvpqFx6Kt34KzyLJ2MT\nJ9udHfYKTXG0OxkzVYHIbc5aga5Y083w4t3aTtXtkfk6uLOu58+TkGttd78z\nS/Wi2yXdinBfEhlqainA5DjS1HOYWD8hXjwFJ1OnlLsb57biZUZ0ECP/inum\n6Dlq4ucf/6ZXxWNR3SGgqCHw4ZRkVs0HOu1kSwub5z4q24+ejEiD550LviEW\nJWprFGe8Cgnn+bosuuGnIetaC9rChzWh2cQPheQxz9NiDXe8FSCe9ydPDjHI\naF59pKptaCnlgHrxPn1vSmsxib4/bQ7QP9f6fKI/RUnO5HYDnOTXyETODz6D\noM5V/2Vo6JizkPSTLmChRmGaHe1SXz5duCjdvNwN5ERR+UCfNl0dReTSmZkz\nvRjU5pm2a6279bZ0LmwzC2cvRR3hH8z/rmJGE6vl+87wysxZ8hRTDw0v2BeG\n+qMw8AKmRRTD6hrQTfAu9TDe2ZQMFFWKFKRYGQMI6tx6b1xZZZ9MJxaxTwKX\nBeuW4Adx+zanKFLiZVESC4VqE0eMeyxwd+UUAqHPQfpxm+KSHX82JrcpGBBd\nqiGx\r\n=4PjZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHZTabmwsViXUmlf78k8AS6NB8smyz3xnOOnfoK3MqJwIhAPbBzMVHazDqLyDWKt/1wp6f+rSN4WYUZBcPU7GVQi8E"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.4_1573540305077_0.16896137980221448"},"_hasShrinkwrap":false},"0.11.4-alpha.5":{"name":"@react-ssr/core","version":"0.11.4-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5fc86201ed6ce8c3a13330d2913d9ac4d6d92b90","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-k83mGH4ocoOU8gi9Iiu4e/bMX+j7aYhrk78SlbT2j9ralK1+BmxtOfN4yJZrqXIgPIU7B0hlSRPg/tOw1gyL9w==","shasum":"ee02d75dea26a71b8a8c7e488b92cf20248e7feb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.5.tgz","fileCount":21,"unpackedSize":42839,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylQwCRA9TVsSAnZWagAAltEQAIKteM9rdq9svngFsWLt\nx/XxAa+vxS20M2nZLo5ISRN33Kq84CDU9npbDq244KRlCVmg0xomi2bF8Spq\n3U5veHEFR3j0uomzPTxPIVr1ZTOvjecz5ZnOtgWYd+hF7ZgKLtTnDwRnWfpN\n8TzQTJueJF0A/uTfuEl3xQ8lxRVoHw/yidZ0FzvPfalZCWH62btDDMpcd6xA\n5OGW4HLtRQiSwUFXFPhf12eQx9T2gsFCSJ1iyharAZ9yRoEEIoHs3Kiz2jNg\nruRNi5rk9JpylHYKxmCksM0oBmGgbovH9v2T8cbvyaobMHXrXTBAdUxe7JdL\ntzeDfK86qdIOUxxIs9AUaqGCzqLvZTLAGBGdVmmD90/aPpaLtUvQCQeusL9t\n4Y8MoVb8pYu3eKQbRZVuyAp7o4ZSOVrJtCXBcjDMJZoner5lX7Vg3H6rkP38\nt5nTgDGMmuwkj4+zsXQopOCbFrGCGF9KsrrrFpvmsgxU25t4jhIXOmGqTIc9\noPSDksXyYuFFtnmUYDEpl66JL4QDneCvNGW95lffJwCFc7QdlJg7Fp3aP/Bz\nq29AMEuOsoseg3dUMTezGAXE36XM/Q+jEAwdb/8/ghmaq8KyNl+hmLu5zA0u\nIFEEswFD8+YS+i/lnRy589nzq0Bov6c2DKPP6ofriQJ9vE50jhjRzO/DfNzA\ndd2m\r\n=nh9c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO7/XMkKd4GQAfJ85q6BdQw8OPfW+b9OppR4WIGTYutAIgCK4m1n3nVeOVuFm2a2qpghUKsPNIDOa9avUzqDxhGSg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.5_1573540911934_0.17892452873013287"},"_hasShrinkwrap":false},"0.11.4-alpha.6":{"name":"@react-ssr/core","version":"0.11.4-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1f5d442aa20e9540e365be79cba223a77d0710a7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-s8tI1BLMHzs8d99EGyUV80wtBdwBseW7N3c2zs512PnwFtZxU2DHiy4XkRS6nEwFdfttAd5fSYVoFPK6aLIctw==","shasum":"7f8db9e3a3deb2f76b749eda1a4eefaa9f8df66e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.6.tgz","fileCount":21,"unpackedSize":42811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylTWCRA9TVsSAnZWagAAmAEQAI+dDS9bqgxYEZfR8/QY\n+MIeSHARnRkfV/6BS1R/VwvOS2+dPkpmBCDuUNUre0buHcVoIdsIJXWRDcul\nYdp3kiNryX3tI+HBwQ0gWuUH/J6tOJzI7sAkbj9d5UOuJtk1KWIv8yj1i1YI\n7hVAYCy/WRq4sGVUZyPHyYMGw2KXY3vEL+G0Ret6604ath/r+Uvo+YUUwqXX\nTC7JZw6WOiZJDVk7YqQhjM9KEgQIZU4WCVa0lF/lIApKtu528+IsIkMgpiGB\nCizV9huuEyj49/jvwCh0TcNBKtrcuOWqdz5bdGryU0f7gOBYGS0q20xxZx2t\naU0xwqNJeXlHm4cZ7/O4f9ijLq1SEXZ8JDpHB0zvFnCdmWvIGRhdoFYQIBgh\nQetC+OXOsMB8qS4vnueTBtJ/k6j8PlXJKY2/2lVXE9bttVbjdiShoVkti9En\ngJDjZovjxIjHbUVW0qJZlTnbDNGmJzlIx5u85XEeDDwQaZtgbExDs0w3biZD\n14PrttxBiWB9hgf6bRNMZdeqa7wzdWeXhfYTccI0kA/ND2/SDBFF41TPIEe1\n5HgI1saqPzHZNkbh9bpGrfck0uRyAnremuyIGWFPwRVps+HiF68dIe7iBf3K\n3MtfcUy6FNHrhfStprO/ldQwWv+0iwFq8Hl/8OgHVfJMgP1UsuyM2Uw1lR7e\nzzHy\r\n=LKKe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzsxz2SfX+9GS5dBYI2fxpW1mgaFxiuV+imwad6UMotAIgf6nw0JN2ezRHrcPj3ZzIMrqHNqEUM5vPeDXMnufEv+c="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.6_1573541077885_0.571876469226726"},"_hasShrinkwrap":false},"0.11.4-alpha.7":{"name":"@react-ssr/core","version":"0.11.4-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4076a4cd52a4e23034dd9739c20bc729f66f7910","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-f1r6lO3U8acRcsZ7/0/CuVYGXF5q8Ajk79n3QaNRmBoyjFBNO99mpfAZDYiaL2ZN+Sp0UPQm9hKHqDUFBzmgQQ==","shasum":"7e40f8dcf3d8de274912fe4d693f112edc2fed9c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.7.tgz","fileCount":21,"unpackedSize":42839,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylWrCRA9TVsSAnZWagAArOIP/3hhHMKRpo0ZojZiVPAE\nTrn4vprpyJMFtSjhWfUfQj/DaDPD3lKbB+eDy8TJ/yFUzfnS73eL1d0UDaBl\no3DItiYETLSEovRuzqj5H1ntwpex0q2P+yEscAzo57z6lSSH6S7mXYY+eLZW\nUuWU22LYqJFKuMCUjj5kvEvXQ2NHlmjBaytsSk+Id8ilxe4xkTRKEuXZaif6\nyrnFpncVOQmPsH5tx5/bxV4nJ32FK4NoRtElde3HnqAYxsA4KQ95OFZSACvZ\nXFpeexbl3ZkCsjRxhk7vZ8a0QafmO8sNlx+ESi1nJGVbIRbBYgpwCER5iTWM\nnFYhErJGd82t4xCdVtXqDw7m2ACVaw52wZQaeXFeaHfQNGPYpyLevSVHnXA8\n9PhBCaxyxdHavxV9OSjGVIHdfQij2C9nrQtSzaJpyG4VTUdLPjRsGMJ6wqGc\n2Q/eKasrO4bzYtqpdauJ8lPrcdxjcJaHSZJe2/k8aPQWau06zW5Y4VcJsYC1\nf+eg8rnRTR8Z/cv10OFEqTQIfJn/wkcyg6Agmjck6HM4h1ql2uioXm2yudVe\nhy27wj9ccUcj0WLEeDQdoVFEgSodPBf3oBMf7v4p7fSNQYYSXKYpWACPztSy\noW8EsH4a5zVVDJWJRzWOPNsmNLi8uB+6rtKxL66hMEuU0Hq337HRQCdb7zPc\nviXy\r\n=bPcI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3qwUVeAtRcynA++eWAXkXdZ5091zUfXJj66DCNslL/QIhAOViSSHE5/o19aw5wKqljS6UAn88sJvFIEHDsHrF4IZC"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.7_1573541291172_0.5393401220474134"},"_hasShrinkwrap":false},"0.11.4-alpha.8":{"name":"@react-ssr/core","version":"0.11.4-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3c80a7dca80567254f1849f4957524d3e7998ec3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-W4SwxPOR6BQnmwVipUTyek4W060LrGuIHGk4ZkEw0ZxYpbrOxpY0dIMO1KcXrYEaS00W+/uoYNHLbNPF4YsnQw==","shasum":"89f25ae9f1939e6c548ceaf23b25d284992d6a7f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.8.tgz","fileCount":21,"unpackedSize":42855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylY+CRA9TVsSAnZWagAA6nYP/i5hFbbVOvZl9liV47jK\nbRKgeQtQ8WnoBhBsfOwGCnEypVx3H1hnhVjE8laNh5mRgCu5n1w6QBZQxEHO\nUAX9fy95kbdwYDOGXWP82u4wWlwEjglVdLc3t5qW6nIZ37NZT08nYQn/Iu1H\nowWiaAXWhCrOjtoSmWZncS19Li9GwNMi2XgufwZ/O/kgvxEwRDSxU+GEb39i\n+XZ25yWkS3b29fN3bV/EHM/k+AlUUqEYYIIzM01bjgVTgDDqjGXKtj8JHbFC\nyYdd/5rsQKKE+HZO4NudmUJGbbxZVha9PFjDdmqNU5ZuFF4uxh1RI+j94QVk\nnv1Qx/8X/9LVurlmqEdCicxZUi2UgRWc4nHS6CyNUUxGfoHxe6F+p82r+c+j\nuIMJNAAjDeECjtI42M6TyA+4ou2HRaJPKOHPSpLz4+Qjvo82tGkqEfeOIkds\nQBm6HtQVBbgimYvjlvPxNtrTzINpx3lqRZMeKcVQcE5o9NnEmqYyZu1py5Tu\npNf5wYKv4Of7kUc3Y+adQo975gWVwZIDCT2XMY3HdwYhJTiUBDxQVBzxGL9r\nqClR6iGCuxqwoWp1Z5vs/H6Zm1u9tu1zuPZoEu9OxtvVW5HQieVkbrhZ9lWP\nrv8UXWn0g8pPCz0FqpQXhZxFFnui/9Wy6AnyMB4MtEpJ+qEi8AFiTgG5ifu6\n6D3c\r\n=G74N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICm06IoNileyedP2ZiKOqUU5UJON/l1pVdcGFCLSGXzCAiAFsez6GtOHgZrIcKG4aj9m8OqQfLcoCT54kMggxXhsjw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.8_1573541438258_0.834995203896608"},"_hasShrinkwrap":false},"0.11.4-alpha.9":{"name":"@react-ssr/core","version":"0.11.4-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c482cfac24815d42bd04fc8656c306be5bb71f81","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-YHaZQVIeXQ9crm2r8vDuOhdNohuMZIdefQQuI/QvBfxWnK9mCzdDLMaJvLFCWoFBdyv5EliOzQhKwOjVddtnSw==","shasum":"f27577711ad608ece7a12f6baa8aa48308df28da","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.9.tgz","fileCount":21,"unpackedSize":42888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylbVCRA9TVsSAnZWagAAsagP/1duHXD4WRyNE82NZBiI\n0QElnUk2aFjiEws0uCSmrVm+vVqhOofDaoWesQvh2+EKtStzAhkTyOBQKwxK\nXX9Gc1wIRC9T7fZKwoOBO9DjGYTXmeQmGKagCUHVih3ikQs/vTjEK/W73IH1\nPfKuF7rZwpvkBOsETHA3qtKsnmu85RwpecYnqM/vbEIn8TfLi7iPMsslnQn2\nBljXw1/uw6Aw4bSlEsZot+FFuiargWZZ1mZh4mCI/oWOJFVNzOVl3qAgtU49\nrOs2+/h6XCCStZ1eCabQsnJkfoZBBkLLHt0gk6ljE2Gz42sKY4F/O/2exng8\nbOj5FunNlsttmPc1owgDYArXM83GKxegrRvEInML591a1DEVdZr9+brYkm+g\nOwvHVyDACmkEurA0axNESIEDiVg1zkpiVoF9LFsO3DGBWJ6SV76b1wurw9X/\nT5MWw01LgPQjJbWvUsf0PZ6TLJraOGdL1Mhs0H3QzmosHrYpqpDGZ5ZEGjE5\nrdrtNbYzgM7VhM8Cj9DFVWUpaqalP2czzgOyj58fPfKahCINX2Hp923iZ9y6\numEsm8BJkWrQBqcz6Una1gV4dLhkJdAKrc/7/iyeqSw/VXKImsipo9xTlmKt\nTA5EzbJQDqoHRyWS9fnDuVDwk8Djdo7SS9UdfTQBL0YMpgTehpNFX8e3PPJ8\nAm30\r\n=ApwJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGcJX6frjTm2uDD88RHhzEIvo5eIqy45Azc9B/cxk+2AiEAwWmV/SNnJ++Ou1TsTdcsT1Pm1xL2tbnMtNuxVz4Z2PU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.9_1573541588781_0.48125001502978426"},"_hasShrinkwrap":false},"0.11.4-alpha.10":{"name":"@react-ssr/core","version":"0.11.4-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"afd5e7ec9ecf6bbf5a3f6265b5b911c89e324a89","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-DB7kJ4TrbnDeBB/GNQtcDa2OsGIU4I21skGD3r13CKO/YWJNwIsPn5NKXARpd+bC0zr5eyoXknfMhoD0Vq+tUw==","shasum":"95a2de6f112039c50e35e2f4126848f8e796bc5e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.10.tgz","fileCount":21,"unpackedSize":42993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyle2CRA9TVsSAnZWagAAOoIP/0L9HUduedag3x5Daw57\nd6YjjZ79WCAwianV9uP3gsZHDMenE1iHJ6cUCmXIuCO3KQevANeOEeljOwRB\nHb3arhrU0y0cCCyQcOa/JD3IrQK8yzSumFroO+UaBbWaotMYsXHuepRnGbAM\n4GgN0mEUbMWVq3Kpv0tan5VTxyuyHyXJsoui9CrEu3BEc36e0qh16nNY85/M\nDwDP78M0qx7lFKgNOeMnR4kx837Vz+JTdnb2cBi9mlHrR6qIDzzdABBZfXX1\nsuuj2oU2NMwh18aT7eF7FysVEWPIrUniP+pJivzr02bSCMHr98JETOiaB9nN\nvrhmwpEEZ+oILFFre5sblWTeXoJwwil/+MkTiOt1kYLknZdB/uO6yI8ZV+8C\ng3O9yYdnZPlIS2qyHbA5JDVsTcdX+11+bsz+rWuXgcuj/eiCxE8DYvxtl+36\nPJ65fr1gsnqm5BMM7JTZiwWMc+WLJ2XAWm9/kxkkRK4uR35KrUlXIGCzc9Wx\n9hklY/RjIxElPqCI46e/SLgJt2gEEZ677iqvEzAN12F1ArldIid+mMIB375+\nAkUnVGcWYf//INGHaXN+nXXMJGjIBBNseRqDFWNIRGsvsqdq+FI1sPzOquuU\nRAjW5O6mPuPWer1C7AOMbZled7ukHgdUTwiVsYTYJXGnRNjUheoUiw3heGwX\nlBKj\r\n=Hfvn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEg4X8wH8peP6s/45UMoK4IC3PUB1qjW3uc5XaE0Fa8aAiEAjQ2Qfglil0QHI7iVArrD1Vhi5gNVzcfSno54GJFihao="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.10_1573541813853_0.9114364098980756"},"_hasShrinkwrap":false},"0.11.4-alpha.11":{"name":"@react-ssr/core","version":"0.11.4-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c8e2bdd6fc8003df00e59bed10da62559ce75bf7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-LP69oo/f9wQUI9IC0Q301yFBDpYWdWd8sAJgo6G0/sp5LnU/G0bYRO9KOV5G883+zBMVzOenoY3T6Hl3V7f8VA==","shasum":"97bf74c54e8a0497e5c55531f3e158f856c60dca","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.11.tgz","fileCount":21,"unpackedSize":42997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylk+CRA9TVsSAnZWagAAcRYP/jbKJS/P9RDbXh5HLxKK\nAgXDjCcKGKV0qaKMgJqfzXQ2uk8HwBNgjat5ILhIV7EC65SCBD7Dhc1c1thO\nSz5hKC0lVu6TNlLFcl4ybE97N+GH8N4xW7BX8iBCPT2Ut/ZZNj1UBEaPxwN5\nSemg94bmC1ueGczNgU4cdWXTt1VG4wmBtAil1mCu+UDsrxldrClfpEbrDKSW\nTmCvxWnmxlxaYyrf7jtU9A3P1zdRjPiuvSSooS9FvAwk51qar22+3Jgcx8Iw\nie6mymrbNUYmswan26uJaYXL88LeOMDu6/GFVYun3RjonAFsCJnjtOtIiZsW\nGVfMUV1MJ5zHOIQZAXgEVCUchLdCSwls5x8ZBGNc1WuviMsQ4PWwYCmtBOVj\nQkDShOuZxbJSLFm7gqzCuVPSWcL4lhHrVn3NXvm0WIPupdNQEQYUNyxPr1zy\nUSORidGcRLJkGF8psWvqSAYYImUdOk94d+6UILsnAv+3xZ5kAAcXO/VkCMDg\nbmwEp+XCKMMFVacymcUn1qPnLPe771dpXCF5Jlz0D+DhuEwSWx5lNxBKiI2B\nkEPvBFGD0uhFaMqVAcbPU2kob2OeBeNbpZzAUt3N0J+LJjcVGV+nmluq8Uy+\nL5X6s1CKgzUE3vBVkm7zJbo5G3GIszfwbYsWU0Ijavw3VRd4GJV73ZIM2Tx0\nXcKm\r\n=VeNe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjZmbDE6c8Hck9mGcttq1mSSelJ7EemYTvGwp/bH1wJwIhAKT5oNakEdJ/bn3HR+pPBswKul6il2Ieks30TDnP0oxK"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.11_1573542206152_0.9455328767358622"},"_hasShrinkwrap":false},"0.11.4-alpha.12":{"name":"@react-ssr/core","version":"0.11.4-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"03ceabfa839eafa85c702f5f872fd7607bb87293","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XNLufDEjJwMym00PesYivC0tVGmfGI0OPTCOAOJ6Dj/LBdRDttX2+lJP14du9uBYE2gZIqxqPN1jtnXATASTnQ==","shasum":"2fc46c24618753b66536dc0c56f059e0ae0811d7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.12.tgz","fileCount":21,"unpackedSize":42985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyln7CRA9TVsSAnZWagAAKTsP/jkjfb620RJNUnr05Zml\n2N/2qgMa1BX5TtVD+AsCbOT/JrMv2ByYnH7znBgyTcCmc/IQn6k4Gz1wY7Sl\nGj4nRlAfKgze60lPK1iYfbA4cZNOC+27vCAFYOOrMce+GbRQd9coax4YfWku\nvS95/5E2VjYkPPCWwaab7RbyJzcs7La1VlP8rBion9WzHXaGlxRWQ49WA86S\nbaSTlOUkIECIfSI2c1QeVpvqJDi7ohOSX1b16k2a1ExhofZZFU3gObCgZbcC\nOQUQM2LbMrRY6pfhLzfPfgKCR71k9f9CS8ABVXsZm/NzNw0OFZNqmKWH4FNQ\nj2uVPp2/5uh5YDsYvidXnUxeNe2xj8NmdOvZOwgt1OUI0fCOQZtn8rHls5yq\nvQFrcMMq4eaWsT2iBn45CVwqbGdRBRmjkWfBIoOGYP993urGbMjc5lPOimcw\nL5DR8Hf+9/WGA65u7Eo+3B+MO+4cye9aK9GRaxrroZ37Hnz0CrZZJbrC7bLA\nuhzwYfVLULzR+2MAiEYW7le7DStbuS6TwSYC+biO54tDVS4/Xllq+snAFQwS\neXwbYTSVTDv1rsB+1tKGtRuTqMaGsH4j8f0cUnYZ4t36SZG7JTUoAK7ziHNj\nRSc2Civfl0iNUXpasq8j/BlwgRjKGT1ac2cO7hhVe+wN+nXhEpWJUHTTU7Sj\nfHtC\r\n=OAYa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD1lQDvBwGyJMdr/RISKh42l0NH28fZXi3KEAa1Zal/gIgYV8qNLgMZJ4SVTSyotKxwKlh4TA6GiofF33DcD/ot14="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.12_1573542394608_0.03459043339528711"},"_hasShrinkwrap":false},"0.11.4-alpha.13":{"name":"@react-ssr/core","version":"0.11.4-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9c0425bdb40764cd2cad9ae41253f57433b265be","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-OUOuFksTyFk77wgblzzdo6nAMDUVlQI8AawkDEXC5n+mrn9i6YcK+YMYnujd09i71KFYbfd1jvv44uTbpEWhDw==","shasum":"0b364f7c36ef198a49cecd02f7d5648af1551786","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.13.tgz","fileCount":21,"unpackedSize":42985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylpICRA9TVsSAnZWagAADdkQAIKTIw5BynWUycEp2b+e\nExypZPLBQmQa8hP1URcEZcrpppMuv7szzP4qLD9HdukgWBbFeW1a1j2o9T5u\nHXvqIy86oW4X2W3QFJMrqaf0Z9osq2+v2XXI7fOjxerqr5lkeo3hzKD6J6rT\nGvQ5RuDq9gUJK+cxXzJGjUEz1DqH1mD4JVEHmMNLyZhVXGVUW4Znn15zPc1u\nV5Fr93NB/BnqhBgvkPKwSEGNHy+mBHBhUH3+fGcPJxr3K/XptVGz+2FfYuy+\n1bVy514WyZK4A+tJrJbrG0/grXb/mZQamHl5Qw820bZ8ZVTH2SG5HFms4s2P\n8gg/g4BYTLRzeEyEE7fstvai7spSk2PZ7W3sIVe2vkSBCW1mXzOSGmp8nbcK\nmcENbBai3Zz90mhcsrwdSaz/h03WXu7x2waqtEGufmZc6zkDucp9RbRPBkUu\n+DOCmnNahRlSPPD1g+j1f8+4NrTkLSdVbFDvC0HWbYuRU0qqME1cU32LjIgq\n3LjKlzHf8NRN/gr9vhV+BvrQXr7MOWkrNp3UhqIRV9vDbDVWGnP3pgqEt+sj\nbsNtwzK0l6tTumRNaWaJixOH444ATcZGTLh5b2jiMcZQwBzd/iQcZ/RX3Fjq\nLwiqXML/b8HndcBTDlf25nhnnPynl3VCPXyzB+n7LmzvGQuNwFjgo41onsNP\n2MR8\r\n=4UMf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfwBlS2SDEiBF/GbzgJUnIpejSw3TZaHByh+4vOD/p8AiBEoiNNz/baHhwkIrxyreo0eG/2i1HDGoQWw91HyrUAtg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.13_1573542471957_0.4856171387168098"},"_hasShrinkwrap":false},"0.11.4-alpha.14":{"name":"@react-ssr/core","version":"0.11.4-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"59795b91746b83963abfb6d8bbca187953e82359","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-442h4XzY8giOja4zvgMd/Gm9jW+4OL5oOdYCLktQlkghICaH8k0RMxelU1KJHzBqOhHQIU7s7XgjURpVQJsPWQ==","shasum":"58f0d3d20931f1d01e8c35465887572597ae85a5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.14.tgz","fileCount":21,"unpackedSize":39985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyltlCRA9TVsSAnZWagAAx7MP/RobSYy6G6eddZFJs2DY\ny8llIh6aj7WPNTix2yQ9XKOClKz+YBr9Bj+LSqUKBhjKmEAACwPDHaF9BxFs\nOQqL4H7XJipTgHjma9Fx0Ku9tAUyExi5idLWJyAWircCvMrpAW0at2vo/ylK\nruA1V4MVjYaEnXlivKbeWoltXZ1/O6BznoiWK/PhM43e1iLuQ7XhAJd9bJw0\nbAT5fPsBjBiuc2CMtGoNQGy6lBNKb3kgMNUqB0ZJW9EJV7xZ4JUXXfzibNMj\nxUEl1/CrTHpIzWF3waEiUz1xFmfWFqf220mkUZjknjiRvKJmqAn51W3j4nIm\na3Rpja6CcB5ln3kTC7JXk8wty4NIELOu0VDzhdScrXbI9X+528tQ+UFcIeVE\nJt4gmAaWvywreclecbWysYyqvUCq/KCIsaTptWwMS63MinENdqo2mEaBGxFB\nNw7UjWkkj1JskiAm14i5IcObxIWeUxfgoBY7NVPg1Lw3jwXSBUi8aM8rjmec\nIYxwDiAqPvb4L5sfaMj9xR8NtU2UVugvhQcsG6QJ27YsCd0lfN8lpGFJorAg\nldmKmoxAnjZ7/LGDMaXGCwAWkJy0hGFBsH4uScoFtU/Ypr8jBL2QDc+0YHm6\nAr5p7Rlo37EBUgMyRXcJwehEtjGL3siEZcYd0gePV3VWniiiUzS7O8CdhrgQ\ncjY4\r\n=tOC9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmK+n00/WFyBodhe6BHtU7wG9fxtsVKQylvGqgEPJ0DQIgVX/NagDXsptV2aInANmj/9AJ/zkoKy7fxoSLgZM8big="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.14_1573542757371_0.41302831023493103"},"_hasShrinkwrap":false},"0.11.4-alpha.15":{"name":"@react-ssr/core","version":"0.11.4-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"826fb7a9a03196bd902ea6f692c22e34b479e32b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SGjSRSzBc1w7FxXQF85rPlz37sutPykFwbADlMLCHOwkJ5XO6Zf0+oqrvyclu6w4VlagpC3K4IKgQkEf6HGSKA==","shasum":"d2f6ca0bde6280b7de13380f3a7d58702ec30d66","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.15.tgz","fileCount":21,"unpackedSize":43002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdylxQCRA9TVsSAnZWagAAdz4P/26fAv8vrpFi9cIlmm8B\nGdkOZjXCgqDbHsOYNuLqCE9Na0afyTdLm2lES0HC7tT0QULjVTA3kb9iHYUv\nKZFwvf2i6v0MwZvi3KaEAQf0i2R9cezAg4eVQOdqsKOpb5HtQwdIlV5rHVmm\nRnZbyrQXwPu48i7b7fkbn4GaFjhfKbva8J/3kaz0ykoV4rVZjDXVCEAPRvCt\nPWxvVJIEyAY8Q0tZC6T9hkgRR5mFg2KB6x1DGFsntSh/oGvNO/aki/yAuwDw\nZpoSrbUbgVN/1W5RjQ6QbRItFZRhMsZMt5VvkOQJtsWvDkrDNUF5+SN4Nd2b\nYzY4PUoA3csVmPoFMPlH+k7hJZ8C+22CX+w9JY/bZNOJExPh2c9f/RSTZKX7\nZ9jdXHeicbt2kU1GSFml0PYpfBSe2eV5w5T2Tu0zzUR+5QypiWRC0dpVl8Ma\nf/IG6mCoawhNlPvHfOPM5UAVhVkZPiizmrzRuQHW/38lbdOCLpi4DdbaAsHj\nPDG0/Qd2MchUJE5ggzCkRYWR1oNTRzotcUg2WIjKMtqAClPH+g+ktISsZRgA\naP6MIpyh+wRtjsob1FCUMPaQ+UbUMpI5KQ6AE2ta4OD+Gfy2F4FlP5hVrkne\nS2zpYRD1M2LQFtQGk4/GXJgBFSmchmmi2BuBdxM6DZj+TfxsM2pnF2+ZQxpS\nnKak\r\n=fHjg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwbgB8EeH8cuS2Rz8OClZ6ACMnnzEujRLtOlnpsiGfrAiEAq+tI2jbz7pyvRKHfpk3EiukkNWnFRqsQgjyTOzITEYc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.15_1573542992367_0.3160892526051555"},"_hasShrinkwrap":false},"0.11.4-alpha.16":{"name":"@react-ssr/core","version":"0.11.4-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"bbbf8f0115e77e89b8ebe3ae1393369aed1f1258","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-jQYU95EmzZzc5FQDIVUL6yqxOJq1baZ1Rp5iGrqWm8Mup+3GyIwZdpP0DZ75CYnn7bJbaF21avIZrXZUUGdP7Q==","shasum":"4d9f1a0622373084399c968e5d0da30e35d5fe51","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.16.tgz","fileCount":21,"unpackedSize":42992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyl0JCRA9TVsSAnZWagAAk3IP/ibhIxIHRfYIv4cNGVsn\njILSxcuxbUC30JfHUelCeoO2IYODqF0N/Q9SnopqA1YUYQajng3mULjqtX9C\n+neYAweEg0vXlYw/S9nl8hf6MFLiohJknE8oyfbGQBSm2Ua0KCRti0sGbQeg\n4I16OCG2jgmiN8pTTFFNFgzepWssOKGKHrq5B2ZHYwcVkr7H2RBSiM4OjTfJ\n4UE8q8SCcLaaApupjTWNEXA/6TqsxplniaqCxZj4gNGaNR+Vf6P1NBetaetp\nsqs9VGwKsm1pn1jHtHDUIxB6zydeZ2fRi0o5wYn7LiXoyqz44VLI+is3mZ3T\n7UQxY7J7347mXmWelnCDovfFHFFg5CWiC7KwofLc2GXWd0x+86L8UwQu0bA2\nx0rLKNFIASBl3Tkv7AfD123glRPwBaIYMhDlSLHOjW6TpkyZoBtmcKZ2tRqj\nKm0zznK4FXE8kv/QMrhukW12ms7uzUcdG+IvzS/ySvIQdw3TVFwK2DbsTz3T\nErBXTQSFNsAvKS3LrOOAByIYUPYcvGUWOgXgdM8Q2TRozCFk2mMQ7XK/SU65\nACELQz+QSelLVT9VS8LDTuCHYbY6J2yU/k126+EWSUCABIdn9zGaWmtEWVCu\n+NLgoRVfOj1xe8H/IXsikAETTuidxOnahrvXfhk3MMC0gTLux84fZEPOkI/B\n1GOo\r\n=aDeH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8YqSbRRRJlGaJyPao1YjZ7iKYcWtIocciWonv19NsZAiBZDG24Q6n+buDxNqiA37ZQrt2GBJh/01hOGhcTVL+tfw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.16_1573543176894_0.6797735623866386"},"_hasShrinkwrap":false},"0.11.4-alpha.17":{"name":"@react-ssr/core","version":"0.11.4-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"04c323e081445a3b392e4601511bd248caef01f8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-v0xj2Kz2lm9FbUrqDIYgBiPn7iR6+TSy58qa4tikJdGbPAL4oWWbJmvnZK+/VYV2MY5AonzI40fNODdzQ388Sg==","shasum":"1ca145cc2d68cf875c8389c66bab24b4dcba4f2e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.17.tgz","fileCount":21,"unpackedSize":42992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyl5fCRA9TVsSAnZWagAAu+cP/2QC1zPFqLeDAUHivLtH\nNjgt2CAwkaOHJywnv7goLmEoNPLtpa//VRvfbSwiNPcnLl8Xcs91spFFKOAu\n0eK7iuDhczgg7DR3f7xB0W3iOWEHLVB0yI6Yn8uPpop9V31WpTvqQ7/TWmFI\no1XPwPSgCqVrK9+8s37vkwiOK7DJZRDw4UR2h2ZA3YUOv26eX1Y7SG4s3nPr\nid/NzXHFkPTSLlW1mVgPO73EgjTtyma3ejgfUVhxvA9KUGKzocPJGYcSNhp4\nk15xfzvYERerOBadPC3xpphteDJ9X5wouC7zFgESJQlcfFyOVpEjh5Gg7Mxe\nELRU2A+SgruNbkX0vS3TIHI7FuRxnO1BlPM7YbnsfuEGxnpmLBE3baXIvHcr\nbRBtmMgxR76cd88F4MzpeWxxt16cztgl2PcB6fuPAmZIBL+kB8F16xXGo16K\nnKWpqc000FxVXv8NZ0BUvcrqno1DyaeYOgtYcHH7jQl/xGCk+zMKAi41tGOu\nSDZfPi1hozuBa7bJyQYKyRYI1ls/YJsVemZBkeruHjXOpAsNj9beBcDQ2HqZ\nIiiTj4aimxHi9Pz+LW3P1HS4rUeBjd/eKMJIc8IqP/eREm400rbrNACkrZD9\nqEHVYMVmy6etyIHqnv70MlMkzzlqazoeLVV0tWN8ielg/pXbD0yMYCIY7Xsb\n12U5\r\n=7ki3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeBeMYG+oGc1cBckSLJupytQFpo8QOr5FZVYutSPUoxAIhAM7QisWGI1FdxByz7bu/f0cfvFggsGnMXVUIh6aJrtaj"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.17_1573543518792_0.30454238405752143"},"_hasShrinkwrap":false},"0.11.4-alpha.18":{"name":"@react-ssr/core","version":"0.11.4-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0d8558cf1d813c4d2801ec01a8aff7075e655c87","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3hS887+V2fjY1a6NOIyI9DL6DVENolgQV8RsjJnB6lK/3dkIcDgvyX6Og+Yb6YoBgR7vw7mAi95gkD+WhbbGow==","shasum":"5b8af588073074af2e1d7e176ecea3021c9acf7f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.18.tgz","fileCount":21,"unpackedSize":43011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyl9yCRA9TVsSAnZWagAAomEP/274qEDXRh8Sv/CNRWw7\nCqAqLxpw9COtllXNB+7EiStQKrsd4ZIXKy6QvxUZGv7vrOj4NQ7Ug1tlBcv9\nI7A2QBdCMOb8EFYHPKZvNOs2NuJGeLgfApdW/0sDqRQ+9mt82rowbn0+8yp2\nqkwGOcjdPqy47sb9B/hiMz6darUJ3VV4RFJ2aiQSANxi4euKv+TZfI5cfQHN\nyrZo3q2Ndowkjib2HJnC7hgSMlQrMTKHoQnScShQ/9OTraH2hUvP7H0hA6sE\nfSm74z8pWzOB5ep3D/dszYK5mAfYRPNR4pc7JmHe/GuRF28fBLXJeoDxlUrY\nSkNMoCzK2Vg7xu5BT5SqUWDH3Tsc98MR8C0TydW/8ItyaFMiLOIRvm5HLi6J\n4Bb2lZXcjnCEEEraqbOX583ScvJybMBA3mbEOYrER90E1ocARX08XrrKE7fD\nHX5JcPkRgV5OjS2Hn5mtflKLN+dsTJA98L+MVLOX7xY6LLG2NZE8ln6ljK0p\nnxvMI8nsIeRdAzneXZiQq/38wbQQwa4QhT/GSqAbyZZIgATacFc4dCBka9Zj\npBIqJAY0p8NvDR3oqSPFH9TxGtg++296iBHs4MuefXEk3o/F3H0DzVjMuvi7\nM0cetBxCYXp+QYN/WJsidDY0mFMzpf7351P4geFmxa6a+Rb2/w1ps6jALqGu\ntrdG\r\n=N65b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcQMLSNz77b58zVKKXDYufYbeDrYa4UqxMA3C1anH3cQIgLeDgZkEieIig2MIurdu+Kws1E3PN7rHKBc8DzDga5gM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.18_1573543793689_0.16380089172136536"},"_hasShrinkwrap":false},"0.11.4-alpha.19":{"name":"@react-ssr/core","version":"0.11.4-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"65faa732548fc247bb20be0b0253366b155aa684","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PauXXrGF4ntPppAN9ZCxP51lI+252uEu/DX/xiqRlZQyXAquG0gjvdvb0olL+ZJ2iIV1GH0w876YCeEvaNfIlQ==","shasum":"6750a04403f8a8ffd219c482bb5309376e305313","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.19.tgz","fileCount":21,"unpackedSize":42827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyl/2CRA9TVsSAnZWagAAqv0P/3T4EJFDVJvfqnHFKlEZ\n2hzZx1eXLoQUlclsBXs7gajIPptfYVIvRJTYZdiupxdlorVGbpo6L99n/U2T\nyktpHQH7mKNrKlOE/XVEqbrSB+nS+wA7l4UcOlkSaGc687NE1uBRSVM3xHuc\ncKHK6KikWO4yOeLP+3bNHxMl6oohZW831fP8vuwXJawQonTIhA71dBFVgOPI\nagPUNX0deqsh32n87uRT3pFeEFEqrde0q2LlBL728by2BT6YHYh8oe9/YNS1\nJKotYEEZEcbTnXJVyziwrLhqVyga/4jit+qmisMkeYhqtWvklTSnGtlYWaNv\n4T8KBvjoa21h8RLt8waiHJ/M3ldZxVzb9tDWD2Xsam9KYekc7PweIk0HTGLy\nIQNwd2zpX0tIyDTsP8OqoGiwIsWRHYGybZP2PUlcxKSyX7Cn8nltwa9ff78y\nVKk80EddZMl1Qfvt4/E6GTJbCaNdslUPKzAUkdVdxAqDxo0DJcYSGEv3sk9M\na4lrPbhqHNzqwJupQhB/AUtvg9U+B+tozUIS/FesMur/9PFmaEW7s3K4Hav2\ni2GXW/CkC4bseSw1ySPXpwOv1t6s1JatOHL6TVzLLajzhIcBxfxwXPq4PMQM\nzbh8wt0p+MMCY/oWh6xumE5glYHr+S0UHRQaP0qiT370d3RK4njLuBDIP5uu\nJr2t\r\n=ib5J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMNNqGOoeU3+Dm24zyj2owvFEHEPxDbxU5K0QUI1/hpAiA6pkeN4WufsJNP+4D/OM7lx6/0DnHX0YjP5egPxpz9OQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.19_1573543926113_0.39744410499252636"},"_hasShrinkwrap":false},"0.11.4-alpha.20":{"name":"@react-ssr/core","version":"0.11.4-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"21b4c9fe524596f9f14daf441cf6e599a0684660","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-i8aLw8dk/vR5OysiRKSinS9RUjgwHlzCRVhgT7DcuoNMv+FFhIHPt/o01UqFo+OnPh+TGMBmfZ0R+oEqS/JGLg==","shasum":"5227716a887ebb6c1b864b5e0fd510185eeeefec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.20.tgz","fileCount":21,"unpackedSize":41074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymDkCRA9TVsSAnZWagAAqHwP/0WnqBCZQPCFFV3lfFTh\nPeU1fnr/JGN6O1GZb6J5klSGsZOX0WHeQbkkuj5bYf+X3qxRNi4D0bEn6OSh\nDbn5VF4m+QXCbVGq6+Z72sMrWltZ2UuGk400MVlbtc3Je4KU4wfJQwJ6yPaP\nzIMxffS1Kz9pNjmzkytJgxEtoFIPPkoi1qHC+1M8v7qLAwSWcn8Ajq0hSr/5\nkkx3DqH6O0GLZAnWoZIyzaopSw7K0lQwRsFtvfV5TZIaLBqu45AvX0c9F+Ag\n1eEFUED6TJTtOXPd5qMd+gtL9eleERCuBoxu2xzGjvBMSwySqmZcXWJWYTHx\n2ca/9+w44ndmIgwTv+DhmcrSeOQLHC22iDzccyojHyG2unA65acJvbP09OIe\nRPSo4dKfA7sV3ytnHA5+0eci5X+mxKZg94rVTR9aeuJ6euaAebC4/a35++bR\nCjhAExrfz+kk0aeNZuKBHGurslCbszAGBSr8z3xNRnlM3QydFKhAHacyRELM\nGNdztcYAYQI1LGZoHQBGo2Eu4hY5nqRfQyxWTCp8JAMcZZh67aukDyqEgl38\nXAiDzcAozy+Ne8EqxAjVXDT7Rswe6cvxnMzk0V6AcGdKMOAKpND8o4XKfJ3j\n9Ng71mhTL8q+zked/cYybwGuw4zPoVnNAtNiiJ8EqT4GztqAzGkVXrDMr4TA\n7ka1\r\n=ysss\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfnggRX2iFB6hgkv0PQzhbdgbHU4EpmbTqYRukmopO2QIgU1XSv5hystEMfMGwvCf/WmHdWREL+ZTj7NsjaVW1l6k="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.20_1573544163755_0.3175924636054308"},"_hasShrinkwrap":false},"0.11.4-alpha.21":{"name":"@react-ssr/core","version":"0.11.4-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"da7dcae4dbbf1e15984293fa46431dfb9ba39a66","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BQn5oR2VWwdzy53TM+C/X+r7u0Y2NSsrxvDb+EZO19bEDoGER/AxpIqQb1QSB82J5/tQEfMzt6JQ9vlqOAZI/g==","shasum":"e72b9b4aca17dc684e9ac86a6633617cc769acea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.21.tgz","fileCount":21,"unpackedSize":42657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymFpCRA9TVsSAnZWagAAcrIP/0JdinaeS0jdjpav3S6x\nAEkpEZfLrpD5XLAauvlMAV5WJjoEcwR1CYA6S9DMv32MK1XXx+zV9xDx6LHP\nManFKJlD5PF5Y+E9/AUlEwGi5T6oQvcf0Vw5YputU/vaYiEpgIKXSXMtqn0E\nj6nGeDDgnVP3Hw0H4GTEi/MSlfoc3u4sQkFIh0r++3uI7YnopyzMh4/us7WM\nSNjeVr1M/lMlwZcNSwyrZ3pVm/WMQLuT1lpM74krO7UidZO23arqcXs57xc1\nsVxRiL0U2DGiofFUnQgqIfmWW3Qlv85pUYNsWd5CKobT5uq3zMN81Kn9N0fO\nobye7nCpEnYUUNHl8xRMv1NfAcPbRPCtgRvZZtJ9GIPwO2liImUpUHAKRbrj\nvJ25VrbCPEa1cPoE13wBVxaS/NzqJhYNVcwCoM3z8liVS4vf9FaEZemlxBCP\n9SFmTgXfFs20dwXAtTIzWVr5dNRvjdiJf7Al30BKnRbUi3lpOA5DfKlHLuzO\nd1w4su3rRgMoCHWV9AtLNcFNkrO4uh8r2ogB0u5eZmYPCKXsbe29YgfDLSJC\nFauq7bSPBkqM/CXLJbCeC3DjiUl6iTLX+vXeiB6uXW1Qu1BO4ZWWyBgY2T+5\nx2LPeckA56uRM15xptbXFSucg/oPOf5vy5Q7N6/XRa+ku4vqrlX7HJ6fzL6e\nH4N/\r\n=62JR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBGiha/oOcUGKN/SiuHuYqoQgBvWCgsvIrYSIIUAdCGKAiEAjOc5ZsyIlsG9PiIkFLc/0tiAlPd49FMhP0wE1my4OWU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.21_1573544297347_0.4998646089349965"},"_hasShrinkwrap":false},"0.11.4-alpha.22":{"name":"@react-ssr/core","version":"0.11.4-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f3761424dab13d4df8203de4ca4b1a94952b0e0b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HlJAPJ6xz9GWv9To/9zcoQhHalM6GV7ceODD+WXYBLeEdWY5zeZ8AkB0MLoE4AAwroOs6SrAXzGIN/pF1+W4Rg==","shasum":"6210e737ba68d903d9a28459fa417bc1a1bde225","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.22.tgz","fileCount":21,"unpackedSize":41220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymVJCRA9TVsSAnZWagAA1QsP/jjRWKjUgmX1tC20JZws\nXeE6jQkhyWlaEUBKx4NnxdW+99qFL+R797ByAouZIP+mkuV4lSm8DLcm9LvV\nOkkULBeTxAD+4hdGM7/0riRjNIQjvIA5P9Y6mvPgNB34GNtnqK5pTrf8tqxi\nlan14sl6UyLxpbshcMw5MBMqlOV0fTJ6Wf9kVgMf2UPLpNgnpt3jS5OFzo1f\nL3tom+Ck0HQxnGDv9fQvyVFHAAM2/kENG0WrbGCNKw2CPzS45yMWk0+yggmJ\nY8XXklmOVGukTPDgSHKyLP4rMA2eR/TOXprjh44qX3QAwp7584q/S4soiKzl\nAiHeJ/3ZkRWplB5mFHAysxKiJJhU3hL9llFwzsWrI31ljV90Y+OnsIxdBRt4\neK8rTAGL88/lMzL/03CKGxP3mCctnaB4Sesk91vme4Ucdn7wzqCJa2yMiZOG\nwfWKUnT1tjywuJusT1WUhw0q7R5I8Mg7PIBg11lf0GeGVHEphMffmfqAa7QD\n42FvxPvkYKOhauDoJKrYUQqLy/BQ0utDDPLjEr3v0ONNDknU/mV6tgaDoP1X\nc0weCSkxMmFECnuPSBKd0SOBNvOVCh8jTexc9bgievMYHKCcF4owiDeT4zi+\nQxI+752bGTP6z4wFefuV2kQduchD9mAEmE+vDDH0ilQnI8JQU2rvO906cx0c\niCub\r\n=6SDx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAa7zxxQAyICKleNcTdXRJ8Ft9kpiCzf3PswZd89R8SYAiEArYW+XKnA4Je7pOGHVPR7eKDirDPvdUo19IIc41EaLng="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.22_1573545289207_0.6207789746468735"},"_hasShrinkwrap":false},"0.11.4-alpha.23":{"name":"@react-ssr/core","version":"0.11.4-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0a005aa799d1ef01b81a13f2629ca2574e57bd48","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PjCu5D7tJ01c8hC24yg7OhdwybkpIxch2rtkN/xV0J/lrp1yyKTYMmfkvH0XMarjKCYJxR63lmhqv7zYbNvzfw==","shasum":"e1b50c3cd3613575293322cdf1599ac89651e2e7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.23.tgz","fileCount":21,"unpackedSize":41200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymW2CRA9TVsSAnZWagAAneEP/3tReY41L8cgSDfLvJ+u\nyXkXC0amRCLwR7HcIK6nhFTsofdnGnoi4HPWK/BVkPU/T13oN0BXYbGJNi3q\nFbuqjMR0Wqqa4bLgSQtA7caDUZkIQmNTxtVb4qgDpV/Yr0P0CTq2EzHRSVl8\nWDzljncl/VW01qpAA2Jjgn1mk7vR0x5FcCOBk3Ntk5ZC8PUHo2v0EHxBjbLF\n267ICE0xhqio59/2ugYUUwz6KDPPxpbbPjRpwkUYeOGIvy0q9YbL7G+Tbpns\nVkFQReAnj9TA9GL2LTap5suTSsvj9p73QqcxRQ5Ybjy09WtSdVq2/f/x5sy+\nHe66rPzkgR2l/ypZUZTrTjIE1txGeorozHo/La8X7A6v/RtP/r0sRjWN9e2r\npqnvXvAuGzYcG/MkfN29it/06NOvspEceioHJutukJUzJz7Gd+pW4OCKy99Q\noX0Qg5MI7tNy395Z0t0A8sq25dn98pa5zgYESqDa7R+DY6AmA96xW30bGXW5\nFcoLJ1cz9hDP0wXMEw0fYHHyYohyec+/Lfbsc7nznyB9CKvxz1Ki4G6Ul7Y5\nAJqsSYm1iEg9Maw18b9pqu88PkioXh04+rDqBMRAeRAJ5baAhXkr7Mg+k8S+\nozMxH3ZYDOv+5GMYnO2ZZarRnjG3GVgOE9Ttm6dcBE+9MBhuYYsEPC3vti7r\nsFvh\r\n=zbVt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5jWGAXnI1gFwtUYN+zGoFTan9eMHouugHi23AAZhoVAIgexVbcWYSsCFsvSdAn6WycurgNeyZ8DKPBZDGWWRw/PA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.23_1573545398214_0.17543392411706038"},"_hasShrinkwrap":false},"0.11.4-alpha.24":{"name":"@react-ssr/core","version":"0.11.4-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e32bf69119e9d8e59f36f556ab26200844f2de98","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-NPUET74eCE/ghzRwyZf+pYF/HmrSHR6LQzIpsjGVrOIOu7GlOBRkeBKCyHFaPPERSoP6R5keRKhw2lh47kFevA==","shasum":"b33cb615771841e4bd372e13d2b4e1c471559d30","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.24.tgz","fileCount":21,"unpackedSize":41124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymZfCRA9TVsSAnZWagAAm5EP/3t0Ag3dYzFo+KbDPvji\nr1fGofXO7qWWoHHW9XvnLb5JhCN/9o9olqzo/gVe9zYUN8ayw4ij7lkBXrXy\nvoTHDYx1OnLWtIIVNdityQb5QNHfGzpAbfKt6hzMJSu/LOaHJUfRGuWBaYR1\n9GgfOY5vKHldreb+uzihepVaZzDmYNbKJ8GzGgituzyCfHnnGeZpawcrMHVe\nq9IoVZDvoBUHgGER+q0V6gdofXjkDKgKVwto4itbM2qn06gy5xCxNLoVqVaV\nUa6RbXcDqYkie1UMK8QNRAEAHDQ5IqTUO5mDQcE0qMJw8uh+4e5NajmprmEs\n2hLD+AYWOrFCSK/5xTQSgmJlqii6UqmLq1Oswwh2k92nypCKWaRih5d+PfwV\nVkqX23+a0HjKSopeTVgESGypG/I5Xdhkr0fXb7BM2hQ5LgNT3PD9+Cy+58Mp\nFvFGiRnC/wenJLkDQw7sLdmwRsKWgmI7VBq5CnAYBbQ+CVPr5nin4VI3s3p1\nGSkL/YIN0726I06aMdJTAb/P6wo92vRmVfZlacrDrLG4DBhEHCdKT238bVX5\n0xRM9ZzglvYtvHoA5i7qT2+0fmM4aFk6sn8bpfSzvmx+L1gpw+H4rooPTxeM\nLt54QIkVRNqKxoE1HSI1zjqSWaYRLa3ozFsKPW3Kh1nXsBe7lz3dSH658TEj\nirb3\r\n=ZaQ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4Z084XX8AS24t3yZAX8SLxhUR2Vw2Bd+Lyahd41hssAiEA4pfw3hnFHMWi2o/NmqUsQaXbduA+hiD/iqwIufy/37U="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.24_1573545567294_0.18869554885092055"},"_hasShrinkwrap":false},"0.11.4-alpha.25":{"name":"@react-ssr/core","version":"0.11.4-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0549f55b891f8ebc7a1339d031d69ce56d4af3af","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- Blazing fast SSR (Server Side Rendering)\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.4-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-EEV0TlHdavC3JkuHBnPCgrezRTcxcVk1GcUKUZZ5vI9KHxV69KDzzND1tCx/cIk2KLR6TUGjUQs55uNtWQsJHw==","shasum":"734e0d85b41b693c3b5f19eded9cc12cc099e93f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4-alpha.25.tgz","fileCount":23,"unpackedSize":43293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymkeCRA9TVsSAnZWagAAf34P/2a+5VX+rGdis9P5yWq8\nOT5FWcWANQkLa0R6bk/YCRuw0DsoVqhmS/raPu8cCH6Y55TfQG2HfRrT/av4\nedwKTBA3ZVCj5rjKGIEoPge52NmYQT61DDuBbN5LEm6k1+tadyGdV+846W6g\nTRr6a75nuY+eqL+eBBlHIZ4TF6mIyTMGlYBgekPdEqh0H+FjKsWI9naTit8f\n5ppyfPIM8CXksRjPB2Vdt6zCtOW4qn4EEw1UNghN5Xd/DQ9kg4GLPqRcdd0v\nXJ6T1nxNE1XOwBJrkl/ddlMz8aAVwFNRh50dMKn3tpYo9rYquNkidrEQqG2N\n2nGTNA2ltPJv9GvXpqvFhzizVDUe0eJUOyiDmZjfMS9/gdeziAVf1tAjaUtB\nQQ9MRkYRSjrHcywCS0mVPdS2vGGYhSIzo1kdQipN6byM1UZvnEZC2B7PfsWv\nwkvKf2REHmkJ9RlhznSUtyODCOfM1ecrPqvXqbIkScvNHER/0v5xuDaFbNjm\ns6RRGWRTz2ryj/DhAb3YFznjEHFD+9irPUnmFivylHM37BAmSdEXMVw/INDf\nQLmyLXVMTXHUC3jnviPtb1iJMSYL/ZAosh7bb4eU9AFZ5kouiBLD8vxlfDBo\nwx7HsU/DWWFOztD5BGm7XbU6gvlFXGvkLS8WCTYBnAggIDEM4Xh8xD99aL3J\n593b\r\n=uKov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBVuGFWOf19dhsO11aFOBohGL3QQJ3V2GzkRnt7zlEyhAiB2n6TI2dWJEebmT1/aj6EOR9UBRXG4NuX3Gc6RqQgDAQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4-alpha.25_1573546270191_0.3727638069354069"},"_hasShrinkwrap":false},"0.11.4":{"name":"@react-ssr/core","version":"0.11.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ec108e8e80294f6fbfd519a52bca1329b7ba5d48","_id":"@react-ssr/core@0.11.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-4C2Z9p/oadoxrL6Xw4O4OFiznoeHmm8Z38BZUFJ2Uk6fHg8Y6L98RYDhcfAhFIKkz83tHMPIvd4/kYTI5YgBLQ==","shasum":"3ae4c3460a59c0837bbfeaaa5274d89125160c8b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.4.tgz","fileCount":23,"unpackedSize":43289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymwzCRA9TVsSAnZWagAAP6QP/R5uuI7nLdUesJaHM3pQ\n2WjZlVXMOiEDuwrlOnVUK2sIv7+k/41DHUaGuv9SO4bI/QKBSkQlVGLwv5lp\nf1fXfBkraK9yc1oHfRJfmVpHTaExe+gVnFqEQYzWPlV8Er0HkBUppzMDCRUf\n8N2EgVO/N0W3iWNJ7DXCiTUpy5JjKfkFO+tTMspA5FCzPLx42ZX1CEsRC/As\nWyiYyQ5HiSPtyfAaQkKhGzKAbB1GfPmgvDwjWxKt8HEqo0ykXrJboQsTKiZl\nzHAGZfID7QFvrsqXh2Lm0SkhkJHYduGhniP+wtyq9lDlgqhiNkKMXhk30bho\niA5Mu+tMtvHl+NI8qex9AXf7KdARDvOgyPOlAzBd98trCOeaX+l8l2flMIIG\nGuCbM6fDpqOSbe/rvL164cW740BWdnVOe3cf1unwUTgnl/gxjy69vwk57BIO\nrkDjH5RbSDJlXalBf/TBUGXbWSJxHkzM4DkPYoLoi8PgX2sV46Cni4vWsx/B\nnm0XrjnnLb9M2OI6VfDdry+3EkIrGMGVEZyOAi88IfreCDdachSNy5qeIUrl\nPV7ClnslKTmRH56SWVCGyJdWUhzAQAaYx4cdDxpmn+XHkclde7FfEwxPMo4d\nu/JbNoTCm9Xn3FQOW39s5A0k84vZEA427yP2tLBPpOB1Czt6EsrYsy8C97N2\nk1nN\r\n=Mw/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5QJYEt1+2abO+nxz+FV7g8zei0uwHFhFyLWxXe27D7AiEA3loeN90P9d21DLIAQ6+BISIY/Vb8f2Km3c30gRZfG4Y="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.4_1573547059251_0.8143870405786198"},"_hasShrinkwrap":false},"0.11.5-alpha.0":{"name":"@react-ssr/core","version":"0.11.5-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7fdb6ff435eedf613f75a97304a30655ea8893e0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.5-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-F1imHkMVPnPJa/vS7iphqa29rQEuX7qFbGxI2yP2AZXgxo0B5W87IoEtxRttIq6XU4yvMRQnQ5jCWpRM5qSKWA==","shasum":"99c30446489bbcd64fd8fed9a02363435feb6678","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.5-alpha.0.tgz","fileCount":23,"unpackedSize":43320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy32MCRA9TVsSAnZWagAATPgP/A5CBWU7D8aE2JE4P7a3\nndyR4mm74+/GUtcd/wf7WGzrPe0mNSNmtxU4X2f7Kts07Xj2PVvDJlvEKsoV\n/b4RrYKe3WQ+kYj61BS/kaBIqW9OiXf+QwTCWKxKD80tgEQRF+CRVf8lLWyR\nJvZdgnGO47yOvFZvbNZF0TnmiIiLGJpxCQuuZtB1YWfLuPuIsbNgUHyMrQuN\n8C03DLTim2L7AUD+/rDgEMEY1jt3egiKFm4X0fhJV5TNwx9K+wUYRnSm0ELS\n/c4jE0gOFCnLDHfn1aXNNUT5b1HZ8nQfc0cqgaZ15jrTFN6kd5QBC0aBhf+o\n1m5eKD+RfN7EAgnk5s8sMT/iV29qP4qqVEKCSijwFrE2hpu8A4QMcwWKtu/H\nXXC9CWteaukkdOl1Vv651XG5ag3Z81mLR3j2Ksf6F+GubGHAV8xmzp5HGt70\nHLo2kTrKMK/lXQDSMrITLzV7AEdofTEnJ9TdilDVMzCEBzI/npMydjQBQCNa\nqYaO0NitgQ0E69c7Gb1GmOObZFd+TLu62izKJicFTTIIpr6saZtHko594NVN\nGt3bEV2vblVrLAB1Jdh26J6R3S8/Xf0dqUsNXmJFLOKINHVSClNt8a4f9iFO\niTkQLSNsHtXD+bt8nXSx+JfPSNs93pY/yPLdapkSW3l+z0NqAqruMRje+a1l\n4O5O\r\n=T6UX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnD7zZSxvw3WNYLgnJw+DLPbFYj9sn9vQxf3vSfg2FYQIhAJ3hkCIQQsN+i64CjAFsiKdjlzNhCOQE7+fi2/c+VlJB"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.5-alpha.0_1573617035554_0.5253503742540029"},"_hasShrinkwrap":false},"0.11.5-alpha.1":{"name":"@react-ssr/core","version":"0.11.5-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1434cebd26db5989bc98111e534bba48b5c34f8e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.5-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-dVVq02fpjAwI4JDP8Sm0SSNG4RP5X0nGnOoDPKRw4bzn92iWgj4KMolagrsqAtUs7vd5tSsTZJlmVw6wHX0+sg==","shasum":"d825700c51c9d3ef20548fe45e7aea6d953d8ea3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.5-alpha.1.tgz","fileCount":23,"unpackedSize":43457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy38PCRA9TVsSAnZWagAAkAYP/2v4WNmqPMhBmWIw1hQr\nCuYPCqBosxAXNc0adIaNwy4FQsw2HujvYmULBdKecF4F5xA4DWrhEGhN6jXA\nA9vDAGiRNLAQ5xG+3sHPsoC4mqFtxc67hqLVIMuzQwncaTUgnwEKOSRUxlR+\nrY0BPzcjoIzz7KV+C9bGExK21haG8Auh6gpBErxtLXI3Il1JWTDA+Bmw2p74\nrdfG9QtEqcb29UNf6yfebJQ1HSAWfp2Qn+qWH9e4XDfO/1TdBikdUAxBu3K7\nO4bU0tS+IqsDB0d4hTCzPkC+ySJoJ18MaRvQrjxvuvqZlAOzqtNal3hdZNS4\ny2YneyfAMzVZz0MbE9SvMslYLp7Zsyl+LsmGbeRimeuRFIMxeHW2NJCDQWG6\ns7nfNWp6Ks9cx9BTFEM1MTh64JRvvzhNffO3Ai828cEB3AdBJ9dGA1Mia6EI\n1rrFWHRjYvSAsg5Mn6raqHzPC8ROy8dpsqb5419WBnBoCwq91gaIKzjJPpo9\nn9nZeKTZyzX4nw1AfXwlBy1O1SoHv2jVOilc5wzyDF/xiKB6Akv8UgTsB5Ts\nCmsPV+stdlmVwHW0eVnLBZcj+hMt+37wvJYJwN02xp3rpp6fSa4TGZw1AAa1\nfrwL0u+GPmrA79iOy9vji73kZLOuRW78SRim7maysWGTPEyU9/cBXBRw/ki3\ndzk7\r\n=RUXI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCitYNSoA/moe6r1IFZr02tMcPrnmQO9oI2zvxjFrUTAgIhAM+aONPFp0iueOPesHkvm0G+449BuothgYaGTWtKbRC4"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.5-alpha.1_1573617423044_0.3158707785963153"},"_hasShrinkwrap":false},"0.11.5-alpha.2":{"name":"@react-ssr/core","version":"0.11.5-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"cf72b44966615e554942be0a03a73542fc3fadb3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.5-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WwxoTwcZZ8hUsxW970CizIh8EqroCYH3SiPDdStm6SNKkkPpvsK0MffBGGxgdnOXIERrKEnS6b4nbLBYvtrK0A==","shasum":"1ee97ed988f775e6f7d6c0fc07824728c1275608","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.5-alpha.2.tgz","fileCount":23,"unpackedSize":43467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy3+/CRA9TVsSAnZWagAA+xwQAIlVwJnOeKzjyWzTrlF6\niUtqPug55tZpIiLeEKuyfO7oUEyYetShZ+V/vvjdTj91vuTjlTqVZ21a5q06\nFErhaMjNGvpn+kVvGOyNNK9j85oiPTt7k44wRA/0ui9+Zp2UNIYEthwsdtOE\nLCMn88VnX9D4jk+QJW3XR2Eyz7igIlSrDeQsPS3+IGX2cyhjSh5uYlf8OrMF\nIvmhsrWxQ7GQV8LvGE6GGvgdfHANEvHAhg429PEGXsISc4oZKsdv3r6kUFFC\nHAah9SBzzpdlxMmf00hUbByeVScZMJXlxilXmbILDiuq5ZYuMei+7mH0tqix\nDJEWUT29qpAJJQ7yqe8S0NAWXqU2FihaU1sX45KB5VgTGJe6bycB4N1cbNA+\nkg6XPDHXILqMrflVxmrEUUqf/fWS7+f+n7Rj0X4uQ8Z2xO+fEBceETVbQ532\n34ARuebmOv5o5t4/Osw5CJ1NkhnJ4PBAQn7Uff8muEeLF2wm3H+F9u1458QJ\nbL9YmBuhqNRnyVyoDWZzpxj5FrI895DceOxOzTWyWSbYVYHfgjCkug++vbbg\nMXMcLQX0hioiuByibZ0zdINVWFc/CpNFFj5yXtxwU3wgA4XPJrAGUxgxboag\nfGP1jHaD1tHRU9JZfdwlLmSZmX0U7HVs0fKlsVY65ZbQ4gYH/yH44ASSVdXJ\nYAOV\r\n=oPwN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeif1FM2kuWiN/2511g/i2wnF6Q53CLMkwx2wz7S7zVQIhALbOTtYTVVaOlf6ivIBsGqyF3YH3Ube0aGXV2a/GwiKI"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.5-alpha.2_1573617599329_0.6315297166878664"},"_hasShrinkwrap":false},"0.11.5":{"name":"@react-ssr/core","version":"0.11.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"eca9a447c87b88262cad17aa143f5e189ce7dd1a","_id":"@react-ssr/core@0.11.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-QRThQ4xe/sCR9B7oUfBXbM8wCa6xCRpui1fcZbUJNDWeTHbY/Kbztu0oZ6yFn9i2Ii2yqBWkdXCLqUMoyKA6vA==","shasum":"e25f43868406044c9a6ca11d509f0cb21ccb7df7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.5.tgz","fileCount":23,"unpackedSize":43451,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy4GBCRA9TVsSAnZWagAALOEP/RoWR4i5dElurYG6HUOc\nYp3ELVkeHr95mRPCOBKolvJ14B0cH7QwSIzAvHtAcJQa40UqMcILOpR+y1x5\njSQX+iJn3smklUk2GQoLQluGkdryk/b5FxKaBYY+Ie4J043H6P9WGrYUY6O9\nVlf+IbSXXJgXXj095nRMDko7dO6k6/Alb8EJl91qJPi0HWeU78HCbWjMG3D0\npIJGabKvkRAJ0QCwR2e8XbffPP1+VU03LuAMUWbwf93vOBK3fOJ5bjHCVh1N\nwuZLgISKK5JH/n5EFlEIxD4rihcFcyY8rvrQGHvedZ2rZlMaRHgrekSeGYJd\nWeHgNWr4uvLlmp6jD+NvpKa/nU9/fVPtJ/N4rCd/9RLdNPfcqeD2cfWZlbzV\nZMub5iRXEttSekMCHohGwW8gbg/sVT6w4CGMMmkcCbjz4iVkRmzFVfdHxhg7\ntCROOzrBuG2NC+BKzHNrXIe/8jBHFez7J5Q7E+xENd6Y7f+IMziCsVW+yx9p\nasnAkHIeM8ES9Aw14bgDJNozcPHZlRgdkilTNtIW9hLb7CBqnKQnuyBce7SB\n0v7Ci9i4ZenaIsft0YeFNKPnA6GjZxlw3TO6lAm7rR0chP4NuT/zZcheVDAP\n0j152xOElF+jdH/GxDFinY7dgZTmMF00VjTzmgVZSCcwvsZT4dzi59vjKLy3\nCFta\r\n=qdLp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDHBqAWgb/IV35/A6fMX7k+bAcopz4iveZS6aVuzd9vsAiBZYJfe50NgjYtjxfwCOqcVnTApI4gpnGQaDVw2WTkISA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.5_1573618049001_0.5943414343652365"},"_hasShrinkwrap":false},"0.11.6-alpha.1":{"name":"@react-ssr/core","version":"0.11.6-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"8ec1ad144d52edb0ecd9d492c8dc11e7df195e9e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-m1VWrcTmPfs1ZMYZZ6ND0qcFz0uDCcz3fJBN+Cy6km9PXIKZ2uFcVN/+zYjCFakIIl/TjBYVQsJNCAMUQXZ6mg==","shasum":"8f0dc25e67d03930285a6041e5a9cd94669ed7a1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.1.tgz","fileCount":23,"unpackedSize":44155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzPlWCRA9TVsSAnZWagAAszgQAJn1kFCViliUnbIVFoOj\n4l2SWzxBk/sKDyKLd3KVs9w2ZNfWlnmmH7qgYUJBprAIBMOlNOjxgYQB/HyK\nYaZxf7s3yhuuHjfwBgjSRe/DGYDacxX/6TCacThTDbO9VTluXo8OCuECJdpV\nq92QaME5rRMRBy0467+50skiclgK8NiCMbWBWh/4YiAYsrXEtGUxJKtJc5Ue\nPmcxYzq6rdXZzsgeQTsHWFA97xVdKB+95V1YYEnrTCttUt49IsTDtIsRzPSo\n8710bgZ0JGgchhp7ahznnBfqkwgIAayv3Dm9pfR8gO3TI8jnmepMzr29I1X3\nRA4T6g7chC35/DU/juSZflngTUUmWcKNw71r/a3qTO3HRD4IACdL1t6NoeCL\nOfLhieMjwFTEeMmj6QrGs+NeGvfBbW89q/b7lTfEKRAGv7sIEhDEJ2Y6L6nT\noQUsl1Czpknc3uNOtoQjW/pcbyyh0qgbaeedL0L9fr0P0BcgaYXCaqku2YXO\nS+tEQLrw69ZKSWLVTS+uZTmqwiDHcHrd6YrXtP8c/D5sHqThyKHgtN0kVSxV\nk8VAv96wSdbnBScoGsTmVHdEUxS0/5e4B5sUGgnF9oRJGqaO+cobG8UZw+yj\n0+bD/iK/DOltDD5ZTs741MvBaDMDE8C3fl9kDU0GecU/LhH1hK0j18EuiHL0\n62b3\r\n=pm+U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1ZsXMiSg5MppVn6Earez7yow7MDzVJkC/yFcmrGXD6QIgCxlSA2kL+0lr/n2wryDRHGuR7fJ5fWm1d68nSNTVz4M="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.1_1573714262358_0.4638516257355174"},"_hasShrinkwrap":false},"0.11.6-alpha.2":{"name":"@react-ssr/core","version":"0.11.6-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9d133e89bf545eef42c257c5f42a31ab7384f3f1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-L0T5xYmvAo1vs3cDG4y+YqyybzpUAmf1uAt47kN2njuMsmoVLNhySiA7+z4MMS5g9H6tY/aYZrWa+sP6CMc+gg==","shasum":"066f96a3400986e65e0694222412ac5c3f8371a7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.2.tgz","fileCount":23,"unpackedSize":44190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzPnoCRA9TVsSAnZWagAAB/oP+gJFpgs2nZZV3lvuVBjv\nrSB4+5AJdOb5RNW7gs4+X6WGCX/kIAE5t2KkgbL0E/ge5AfLdN4ntsTocaTt\njRTuy6m2qNELFVGkDptJj4kYG6g97Cok1mCXvPgOKJhu3HBGF9epdJ8PGYQM\nfRQt2wKMNddiiUwTdwu2VnjXSz0c1vz553eDe5ron2xJkz4SV7irFuWVwqK7\nc+kfOWdqBDlkYf49SGMvsTrUCeVK1o/7w3XccAJiSJC3rTk8NFpFTGFfUPPM\nJDunSWkwYm9JZMR2Euk8FKBQ14f/eY3wNVVCKEs860S+jhx3DUqMdaYccBqc\nHh7iGRTdlqfcD8gwazxEKjsh9tEKmonwSs5rqYu8BzWYtB1m6Am+XYpKoyx8\nHuccyEoodCQpsQDONqaA5eLPxvltuix3QZsuh4jxRnwOQWQjXM28HKR96vD3\nBUEGpAj5AUpbyEDeUeKwdeogDUGxCf/bGqxJ6OzLshVTF7we0/RbjJaMtbT0\nMMIt7PUSkyg7v6QTKIUKTb8FaXyqftvZNrel62h2sbRnIk/+6c5NG/C/5m/F\nefoB7gBE/OjfGOlpEkTgNnp2GdGYWUIpKsmg1w0FXrI727yCNkoZvU04K44d\npedLklpqN/3f7r0tdFV0T3A27I9KFaWEKEb5KCdGJDiGfhzgc51uBX+AJFy+\nPSSg\r\n=D7SB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrtDalTnufSNwLsvC+14ot3VNrZGs6sv0Mw8Uqfhoz4AiAVSEvGy+BQq+MfTgQ7KFq1LKpOzY1teKPpdFOMiZGV3w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.2_1573714407996_0.10895126297357827"},"_hasShrinkwrap":false},"0.11.6-alpha.3":{"name":"@react-ssr/core","version":"0.11.6-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6936f52b107fecc64bdf35fbdb41bff77fcfd693","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qXWPXcXREuNcelHik98qZR8r8bhR5fIfKcKgvxpYd+BpsnPPS2/wwnNe0LCdUhghnYaN6NEgz0HFswWVF+TsRg==","shasum":"06588376bf98528bf6ba5d0693fd7579de9cff2d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.3.tgz","fileCount":23,"unpackedSize":44289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzPrQCRA9TVsSAnZWagAAVkMP/2DSc4JSQBp6mASa8Rl0\nm62cZFK2CkfxE2hIxjkyz2aDqDY8fn+GUhxvDOwLEYyCOz6A11xdSswGrmni\nTUkt9RIJvqla1isadONfPJue+wiP29WUlfOA2JvhT5lXPpe7TmVbl62/mYn+\nJ9B5YY8D7/NJL2ZheJd+JbQqKahwR3F3ZMlNTcfHW47d5ajxfp0AJ/j2NovY\nDTwEp7Y5Qf6B0KYbNNwzxdBoYM4AMPpwQSZqzCwiWcbFef0bvU5i22GXwYP1\ndmr8dXId8/cFfjWEx5vreb7F2JuBhNBhEg9fTK5d/6zNveHCv+FS1kmpwhW7\nSOgg8vcf59foU/E3LF5ygi0pkaKS73lQEckFW4Y2WcoweUAc5NjdHV3GbLoC\n7LqZ6lEk170it7GX39Sz5aQNL90cIpxcsA9WCxu6+nbMM4YluY9hcMew9Br6\nJGIbWxHjJ6ObfHr2NN09ZHkcUqMO9X//4aEKpeszHPJeXPxIbCl72mBU3An2\nxJEiXRjHvdl8FuSEhsTVn7sCVvWIklSklvSQB9KD4nfC5F3Cu2iD8FuOZKL0\ngeJ0uH8Laz8i0cXQiLYWslrp/kmWt3NTwpm6Vtp1b5EUT3cKZdhVV9fomW5Q\n2UE7DXgtKvyDhbsUrurYT4xi9QSr3yLI55XiWGau+iJUuXg7B8VSvu+jaML4\nVaB5\r\n=LSqp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7JhWe7IdLnvjqiawR8aCWOLvnUBXLe79ou4eLwEltrwIhAPvLuPz13m2i3acF56tYnrCo4K/cfgpUuft2ADM7nXmX"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.3_1573714640367_0.8033993945033324"},"_hasShrinkwrap":false},"0.11.6-alpha.4":{"name":"@react-ssr/core","version":"0.11.6-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dd2c01666a2136029152db9690962b8e27c93f74","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-tDQClJM8Ldbquwb80xQG7d+VA3cW8jB1/bplEitQ+e3cDt1R5zAVHJK1HfVZuD97nf5CvNss6djW82W8Gv+XOA==","shasum":"d7f85a627838d58b70423aa7541748263764101f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.4.tgz","fileCount":23,"unpackedSize":44458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzP8BCRA9TVsSAnZWagAAaOUQAI3dkXOgHRCZTaf3UDNw\n5MFMROOhtp26uVZHWb9Cgx01IVezH+g1P6y2PokqWkk46F/g6YQs8TmETVqC\nef47oq0z20zrCsWJAUUPmmoz23R3OVUJr4FSAI5s8PhSv8Fy92/0lAkhKEUn\nWSD28JLt9oLSJY5dKTL+UFe+H6+MDhFWhmtrMRFcyhpLPTyNeExprLsQ3LAY\nydRDCpVpw2JYDZuKTut+EdmnmvPy3FhDy4ys681HVmP0hvrP4eCH6fKPeTQM\nA/ELcf3ZdnRZW/MZS88jAcve6JaNP9RRC42fL8rijqPI1KwLJ0fbl9F19OWw\nEowtcHHr0GdzDJYVcHOD5c6/eemiFb9WYzg2E2cEHoHuYz/qIrE6F3k3+c5a\nvJs087E9xgt3ShiD40r+Thqo6d1K7vCsynNwOHHytHmhI5TxumFykZhN+s2A\nLTKzrdc5UrTIm5JuRTvj7mshQJVYFshgyNSqbzFZGYWUhlms2iY0Dsk0JETm\nmRjbJ8DQNHH9OWUgI8W9P1KjJxt9vvyFqNGGm5XD6P+9DwsqqpQspa7IKs6w\njcFEhp8pa2v3abRa6clmknbvbuKqnechaD0PQqBm5LqEP/bIHUGpEwH3kH1d\nZBmt1DMWmgHS11tO6/+LBDxH6Huz5KNZ96/KiGSXIuOySlslPkgUsBaX6miy\nk/Ut\r\n=fof0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAhN4sWbiD5/FZgBV+oxqbKI9UpU1GygfCLboOMyDjVAIhAJl+QtixL6O16/CaFqwq9l0nrQQV0WhYsDOG1pJMdmCl"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.4_1573715713005_0.004461767434999597"},"_hasShrinkwrap":false},"0.11.6-alpha.5":{"name":"@react-ssr/core","version":"0.11.6-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"798bc390a1b9914ec8c92a590f424e335b24f402","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-QgVD4wez75faFt1eTV38G/bcED8ZOhyqnu2B/WpcSu7B5S1GhR4gHnFR6PhkJmpQXCKBPTG/OW0d4zDi4B7Hrw==","shasum":"a12d1c62d5cf56b3bf143a516c238735b8a978c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.5.tgz","fileCount":23,"unpackedSize":44477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzP9qCRA9TVsSAnZWagAAdSUP/jRcto/f15bDpdJf64Jt\n/A68BS5WzHCFsAXr97gr5tu9Lz50kPFcI8nbGlHn/IBsGPCprciEHCY+TXBa\nHt/Q/JG3Rd8h2m+ZOGTub5OKDnvCtmsb5jtQxs0xMmOYA/lz6J9hftmgvkpx\nYC8eAYkvFiFxt4HGzrkILFIy7PKDOGlqaCdTfvZGd17cB+w1kC0P8judVAmB\njds7QO0nFVj1n1FKfFNyw1SD0eVSSRTb7QSqQWWdo/Q2yVrQAN1JWgTaJxlA\nAoEyp8uEN9nDiqGhdW5598XRxSv3nw1+EhyvHUVEdml7bYSanMxSrafhNwtp\nzePJyjKvwGPWejGRy2Zls+BNC7AOaJEIqZ5eKKg8YV5XchwULI8YgOTqUvSS\nWTnP5+wbBqZZx92zNVUARlCFGmxjDvXXmlhgkwirMtSrF4B1hHb3D/xkSDaN\nnKk9AqiO64YFuGHiP0KDyzFuWe9DvPf7CrufDM3lWusgOSNdThsNtL3grMzK\ne/peu/LWZ7jcu5kvZYcoqjtHwaJQQ4RPlg71+GxxgGLXAFB/cK++pKCaSsjn\nUWVUFIIPk2DUjkaBzsqqKLlZerDuJQQx4wC+mFfGFjtWqwPxMw9tpSr4UDm1\n3rCPoE0HM+tf2rcWrhZhfXH73d5O52pLem+3nZc+ZXvbqbHLWtjuPC8fN77R\nuqRu\r\n=kKiM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPr/WzcZ6bVWZKCTOMA2Vano6aUBhBSRPsAcuCpozvhAiEAvU1ZoCrKNiPB7klkt8U6/StoqWqMY1ICWs9CSMBwmko="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.5_1573715818224_0.661049149555337"},"_hasShrinkwrap":false},"0.11.6-alpha.6":{"name":"@react-ssr/core","version":"0.11.6-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c6670c2842a6d34c271f71e197a354bf8e7361ee","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XNOIq9tVm1cYz56e0DmHl6u7jrPEiaaE1Lyb7NwsPAlJ4qibAiDH63HzdByMtyeYIfGo97CQXnIuxCh+zHd7SQ==","shasum":"bdf9b322b042e6cd7e42dda6ca7b172a3e0d0e45","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.6.tgz","fileCount":23,"unpackedSize":44423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzP/JCRA9TVsSAnZWagAAsJ0QAJJNzom8NHu2M1xowy1j\nh++YaR7lYyQeuPLI3xvE60BLd1t+II7x40m/efRRW8zpk9XILDND2BdT9JqM\niDy5mIzyiw72YjhsI3lEaryW9xHwqbWFkri7tEkhRW3QgaGLTiSh03A2oFsD\nv39tLfRMxzgd0g4VesAJvtQxv42hreHgjUz1hwpaBG67FknWSSNe4+3Ql2ov\n2feYnKLbekMyUXVM2mzM6+Xl85H6bNPxEseQ6NnYQpyXOqUDsjGm1fPobQse\ngeUnj3W23d3lxLUC6BZaQMQi59hr2mAkRQio9fobAPHLLy3CvQTerIHTTxWL\n/LrLEJccQ1lZbobxbm//3aUlAlBPShzZGEczcguZoEtJ3eGiqJ92Pt/41dBH\nm20W9x8QP/zyPdcZBxepf/FlUlDyHcGMG57ss9t3rCLzwtXUtvO4+TsFllIL\n4WkPfI9sRm+6NpdZPQbWfzl9eOF5E0EIAuK3mKtuw2kFs6gYwDxcpKaxJZwj\nbe0SI98Boihm21UhLclo9NK6rOUQED3M9BDXas2HmlLHlhugY5vU69cNi6WE\njjdg+6IhLr++s7ul3+HB2CT+a92qd1zv3O0zvir6jKdngtDNyhriCXY6aI+x\nq04F44EzP/jNeJsrF+dQrZeYHeN+fASaDkWd/p28jhT1mP5Uu2U8/xTLSSf4\nDRxs\r\n=IQQi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5R48/o1IP+aQuzWIvLm4pmz42VnZk3Wn4IGgFjxXDoAiBKB1YGm+RxWd5QCRXpjozkMhpaVL2evx1qaH0KNWzUrg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.6_1573715913406_0.6029299313960714"},"_hasShrinkwrap":false},"0.11.6-alpha.7":{"name":"@react-ssr/core","version":"0.11.6-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"61f60f81e08c4e8c017d34872e5322a39ed72ec5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qFnvrh/cfkqxDVErNeSVqwBl1R+QgyQO3B1MtyZxXzLnxKjKljG4wzyWAzlnAbrInRmOQZZjIJOUIAqmn6u35A==","shasum":"afbd8680d64f84ff4c2e3d7449ad53f50be70c57","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.7.tgz","fileCount":23,"unpackedSize":44209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQSiCRA9TVsSAnZWagAAJoEP/iMNjaX6wTgLFZMO4Sv2\n0jA0CwGUFz72x9aFNRc8d9KsNPknFyj8cSdQjS+/IMYkoXoONrMRTMGUTtMF\naOMoZovcufw7t++3DKFEhOtVDXUcr8dr+qlKf2pfV7VVy8mbiAwHPn9a73Mp\nbqNMC8iKZCaLzshgxz/egdbe/FuHLxBkM2nuHf+PGO6HW2ecHakqzhJVupIZ\ncH9SI1B5c28x08oHwZ0z6da86QybARB0raHVNUmMhdymJe1E5EtcRHtCmjMf\nQHf4TkGJgVn01bmnI3uNSIWRjd+GD+08KORDvg1dybsgp1m5sEc0HT4Uyku1\nSogru6SVzhlkQFpzOclA05boemfvVHSlXD2ehCKJa1cSLymo2sd+cykmgU9D\nt8pKhn2BdmpC6bkEpew2PiZY7ufBHRjVV36PevoCY5Ba/e28LlsgSSDNO9rW\nUw8r7iVtvEMx+T5jSHFbzzhk2aMF46lKFc5U88a+YstkKmLi48g2TU8UggCM\nkn4iMLZBDiklzID4mfokDbKHncUUeI0eGcAgKDSxBLivxFMGcyaExKss6Z+n\nHh1BKSqrK5lLFwmBowoUWSYKZ6xaRGquv2QLvpz+308v5nmiWy1k4HfG5tKg\nrh9Hz/w0Uix78GGtPzfdgHU22J4fSqnnCNq7YySXdfeN1wGGh3Bl5rys7rUA\nvXS0\r\n=X1UZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEDuMizW2OzRI4Rg/osdrd+NM0icVWFMIdWJv37QIE/cAiBS/q9DJ5T9dA9bG1MQt52WGEDZW3jGtWP/amv8u2AhvA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.7_1573717153860_0.11922807648533484"},"_hasShrinkwrap":false},"0.11.6-alpha.8":{"name":"@react-ssr/core","version":"0.11.6-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e9025e42e8463bba34aec250c52fb42d7ae05b7a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-v46IY74PDGCJeKcc9rkmgLp6nvFv3UDLijjroW0Drl7omDlekw6TNdAhCE7c2BatIZtIBYTc4qhNaLU7WL1lEA==","shasum":"798db4c002db2265bd2ac06e0fd870f23ddb4ebb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.8.tgz","fileCount":23,"unpackedSize":44254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQT7CRA9TVsSAnZWagAAElMP/0nrvjTOn0Q3nJtEIEXB\n87AmLiTNUrD2+kpP8Rlds3bgRs20kSRp4s95oNK9PM1fxMxKcgrcSEHSBnpe\nIJHbuNT/TfxIzaUezQRAwfQ3Lwd9MuTecmBWrIX/R/8lAgW6gKwcWr20ou8l\nPMCd617V71u2qiOeQpyPCSnXrQ9eV8KbFoTg3vEzDVW4XAXTy8WsN9spoc5F\nGR4JxCGOkhVSuQpKVN//o9e/9jW6Lo5S4kwWo9GuLRjvdIshoHm07yhJC3Mn\nUUhQBxdI0TJ84zV/AXmPZWDhoEtIBBnjKJplcoY31gPSniVHN+WUMWDmBeEB\nWx6+cW/uE92UswaIRg/gv+zFBR0urvQ29R5u3iq1mkCxeRp2ki3VwORYIrGz\nYmaC4WfLN2MaqNpP+EMDpmMBDuOx0v1M8k5ZE0u2imBIB4WCwoqWCaF9HncK\nKBeSkvA/jqqBYkZNtL8xHAcWbnuC19RN4XclZMVpsJqT2FdHzWDuWPIAoXLB\npBxXhH4wRl6kdNFe6iSSosIvuUYWTsNxhM5GxnyBvgSgNGZ7gCRAs1Y8lqLQ\nxlbxZNEFQcxQR4mM9jSmTCmNk1TDn+4/gBd5zcnXcX/NFivjJKYWhPEsZeie\nafrwCdjZB3Df/FZoswsuk8cyz7etPEabIZvoiuQCiSn6XeKy68La9n7ROjS6\n2V9K\r\n=g1nw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrIbx0FPt3rUJ3hTrvD0F9XgSaJZLtzmjPyXdq0bznowIgCL4KGjWwsglKuyAtgU/hZGiIjAL9OaF7IZ3vPvBpFTk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.8_1573717243072_0.8636321028867453"},"_hasShrinkwrap":false},"0.11.6-alpha.9":{"name":"@react-ssr/core","version":"0.11.6-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"7594c38881af44405d2d13787cd1fcba68c9eaef","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VMRm2BTOABcDTRJq3OLR7Pn4UfsTSzYt9tYr4EM8DTOZoRGZ9OYzy8QprK+7v8g3ZkOK4d9hAh3uDChiX30p+g==","shasum":"8814be16fc1c1f71ae373cb492146a72daaa6c96","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.9.tgz","fileCount":23,"unpackedSize":44302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQUnCRA9TVsSAnZWagAAxG0P/j7HczVs6NpOGDGc8pFW\n55y9uytiiFVcfeLrJh3qexkMpQ5Fh5LyhA1gz+zjF/SRpCLqULvLkUn/8xb1\nYjtRVi4t/wG1wIzZYlrkU0NSJYcVCtL1s9fWwDBa5Y7FI8Y2b33RqqWEd1dx\nzKuI/W0jxddHA9p+u7mH+nqeKStR/i8NFn2/LiZP2yKJ2TT81I5x5A5y+pfJ\naZBzhIbIpTx31gbNqqvpnOjDZftB3dU3AN4RCciDQ7T96xh9VRo0670BJD1L\n+3C+wQss53LgTm7T8XqZgvUNnvMk7vYacLY4esGin3RmZmVBowFp2h4RfeMn\nMofW8npzraTh5ckMjmuHHcbcY8IkFWVbirId/sG/+zd4jlLZIHj3rkSF/NQr\n3QNhVDN4RtuFm3dUMxMBEytCylHrA6HQaUGw0Xg0g7Xp1X2lZNb5VJV9/oS0\nKORodYbVix1fGGVPRxs0x9wroq2mDYJWAzYUt5mHqQhYiMiY4TRcUTEGaKJ4\nTMSVmj3N0JotfXs1ePEv3Z5eUcCcatNbsCmCas+e2B52sr2xcexcgA5tTLu4\naqudY/uPzpHlXIpDzN9hY/vH3lzRVAQ10i6QZhV8Oal89UpDno1FkrGHi9a3\nGTxkXUX1ch7BxRfMpxwL4AzAUKb6Q39j5M1kWkXJYmtKuRIq1as5kdFtWP86\nlyXK\r\n=eYct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKAIJh5sV+vbJZmaRhxtIZD6ZjA4pTKfTxsQLu3Yej4AIgGORM4j90D1QN4kAUlKVjWimqsiKqFNLwVbm+xSdh5DA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.9_1573717287245_0.2643588920436917"},"_hasShrinkwrap":false},"0.11.6-alpha.10":{"name":"@react-ssr/core","version":"0.11.6-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"dd3df1ad821835b5c73c3cc1a6e757e69adbd598","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hOGyx0xf0VW4PjIn7N/nS0Q7F019Dyruy/H0hTC3NyurCUBRvwrJokrMyaCfRdypQNksMTGuJGfSk+HG3XGBXQ==","shasum":"94a15500d505dadd24b137a678166b857327bfe7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.10.tgz","fileCount":23,"unpackedSize":44259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQV/CRA9TVsSAnZWagAA+NgQAKT8BGWjYsCQG8f7fv9+\nXFYnJZsETpkBStZ+QY1ZR0TXZUvleTO80v9ngZSBWyLiGcWo7N5Mlzg7Wf7K\nJuj2cTYTuc81poxP3Q0XSzZ4S4sGWQbxmKKmrCZaY1LSQgcn0IGKawnk9BLN\nIMg8ndeGhz4NOBangjojMDHD/1u+duYDPj6e0Helfj0mSjNqseL+RNqgxTfC\n6gYALYCDcSSXSbXiSQbzlG3URXIXAeBGnQ4mWvRVtVd+W2EgfjZCvKruK+FU\n6y1yyFT874M9RZCvWwg5/KbE0qoR1kevxEZBbhOr5D2/5lsjEsBRtCBxAJgs\nrD2yH9xW6LT3pBzB6gTS2NSk6/4vqaBPXPLwMJhogU8lcJ0HZq8CNHfnnq0v\n2jJxfuoe5fF2rrgRpNGKqFx92MtWcEK1/dY0GGl7s7tS4Vg/JXFJMKT5Ju0v\n5LAcEVuX9BSXtsQRhfUMxSBcnAMpz/GoqY3vxHoztgNCDRf/SMkoiUKA3WMQ\n0P5hyWKIFZ1X3ykR4tZbXt/2JQDBN/wef/VjotaELC1eEdmMDck3mq605TgK\nm2S9T9YcPUWAK0xgOz2eabwX1e66OBGzm5pOfA+UV77DipYvzqkw+l/eeVOQ\njGd0dbWUjrN2z2nESAWrpRz4Ki1oQR1ZIF8U+WoGqZc+T103vksFkTBc4Xci\n3IOL\r\n=l8ed\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD33G4xha+AXn+YMOP7CdhAGFiobu4NQEk6HbLTdblgqQIgWkNCGg5RXI4fIxaxURdlt5GlgD2CC0Xi7EREsANZ8D0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.10_1573717374734_0.8042354249791757"},"_hasShrinkwrap":false},"0.11.6-alpha.11":{"name":"@react-ssr/core","version":"0.11.6-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"76c9790bdab3cc46461af95bba1e720676653888","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-I0SvimXkji8rApdYvmB5vYncolg0hHsFV+jvhThNQSKL30EWBFchLuM/4yyvFhlyiXryRzkVUXvStGaxOj9h2Q==","shasum":"93d68bb86b6408ecf2f29d5ae38948e8599f7e32","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.11.tgz","fileCount":23,"unpackedSize":44278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQXUCRA9TVsSAnZWagAAXh0QAIyatRg/vbMisiCAyMx7\n5KaNtKYjVxh5DtBwEzcUlck/vsy5It2dj6gMVadh5fKuXsWl2STlb7C62eSo\ncRh8yWDaWY5ChCBHbghIJgt8lSRdSwzte0NENXiFM+dpbtOOoImVrhvzec/V\n+JLVHEX0yDEV+i+VWEK28P8Fasxn+x9KdcM6Qgm1ti9OFQj9dHHVP4kt/boi\n8vAxV7cR7cwe8c3LE7oI4Kj1CR39zNIMDp9Iax/OGPOts970c9qFww15x/xr\nkFCD2KS+az+Z7baWrLzjt26jWY5CUDpQXgpAUWDGjwZEMEKFU/bRDrfi5zUc\n0K5MkqEaCImlF6H1ESV00YCE3C/UbA9flfUJQez+V7xzi9peTbNB9SrCMWWI\nmTz6n6Hd1ZfEOU92DddVCDwUUUfEJGpm/lbDQhIuJVfZ/qJ84r8wGubNedym\nrYUX8F+EX/25jKyS/K8uqvAEzCVx3K1uYxRegHLlQAS9phlz9ediKGfsFh7+\nXvgPqJMIwSMvY8GzGLIysQmn1Bwf2t2dDYRYNJqJ4+UR+Qq1rXdRPNpkbHOq\nEbvRjM/gva8Ti39eHAwgy8+MxA0iVOPQc5FaIOBi/4kkzleDYcF88MY5bdFL\nUJEAYwuihkU4eZgM5iiB3ccjnxWIcKFQwz2wZAwnGvaYroCMYaibCUyfeeh0\n3Syx\r\n=ch7O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF8q8Tr/ygnvjfOrBDzmJMhr+UgE6cqKia7DChQfUfVhAiEArM/DQSjDk9YPbgZmZu52a7myWtDJRujO41Oyfj5AgI0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.11_1573717460391_0.24214259114985892"},"_hasShrinkwrap":false},"0.11.6-alpha.12":{"name":"@react-ssr/core","version":"0.11.6-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3e31a8fe5e12b3ed405feb6b2d0bf11bec83968b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VkOD86NfM1GEzaWGuAu2lNTVQGIArMOp5YWUHW1PfQpeLL5iFc60A9Ww/l4XqkVjJEiKwUql9bF+WtVQKhP8FQ==","shasum":"258cab94170d8493ea33fa006f2332e0b19c84c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.12.tgz","fileCount":23,"unpackedSize":44283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQaQCRA9TVsSAnZWagAAAqUP/iRMZU8cggRjxCrYWzaN\naPdNgNX69wXL1exfTzu16xje4aSfnGxt3EiPEh6AyhqLOtbVhib91XtfSgwY\nZBjAc3rAAoxelNo9J+xSo0XQzA6kt8q0RZUCZ0TXJr41a1A+y1sg+a27v3bE\nPM3R+2gzRW6nOR0B61hWhFokJj+Dd0jSvhcVYJdIveS6bpo7imjb+dkQHFVp\nHNZP1A76PTmCMsWdzBLsfxPPlqciP5srr7yAxE6LoCsXpCFkv9V+Lr8wAVyQ\nSofYFnHIXHUX8m0A0nBzZ4cmb6Py7i7rWR8MXIWYMXI2Hl3xRRiQBxQX07/Z\nhrOc+BIv6QoPt+bIFihTTePbH20N3Us460Z0NzKn+7nBmBkFq7NQI4lEmoxg\na+OqCDGKqY9UxxpBDzecRVpNT9xYECweB8FXs9sw9vz41nl6xs4pmGJl9gdP\ncygZDBHiCHJMxnYNKJ33PWR9DQPvMz5Vt7cq38bzXIZyh31X8qEAiA8CxnyE\nUstL8yJPvCsgKwffxmMQdoy48TflvhFPN/avT1iXdFIBH2tvQSUwlfDvfCWg\nwaA0TIjHsovZu7jraWaaullSFyiD8D1s6ScRwjS4pI42S/+PFleziNHzOuYA\n8yCHBnrcuINceqTu1hY/MckkAPaJdIY5sBOxmWbrQih6coFdAOaGVdZTBTgp\n2gN5\r\n=hiL2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAiALbcyEo2W2KyMt2HE8WVsV7LMf4LKLn2Kx2mCWu+/AiEAuapaGIwYyHhQ0/XdHrI/WxEXCty8ahj9WmxsXLVmMSY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.12_1573717647591_0.6590735871572153"},"_hasShrinkwrap":false},"0.11.6-alpha.13":{"name":"@react-ssr/core","version":"0.11.6-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"d2949f7b904729c4d9eaeaedfa5c5ba64214715a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IrHfCKP1sbdeSS6j6Owf/Er01NPjafu7ya9ij5ihv8TiB7sij3pSvyfyN2ZSmlhRYQaLJDIG2O5KDJjUQxtA6Q==","shasum":"8a46768b3e5e1f6baade46678b781596af231e7a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.13.tgz","fileCount":23,"unpackedSize":44264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQbnCRA9TVsSAnZWagAAir8P+QC8cV1rs2L9Ni4hSPcb\nJGDyHbjaCIzvYrd4igovyZrH7UUNSPVI9WA9Hu/nOF7DtFh62zxizYBlJSi5\nN6ecuMqeKMWTPhsUwYbC0smD4dgGOHx0yQcpmFH3xWsmbORz08/6pHLmS75f\nTLNwHX1nGnt94450q8YTryLw55BbfclKh2KX0QGmFDBSj2+dyfmXKFZMt8Yk\nrHi45DbpE5pgLo3DltbqUWh/i0JjTqmTKNK3qW2tizSMxpogGV4aDgXEAQN+\nGsSKwNNmw9nJ01HeY9/5Wx2eu+wQekv4hWcPr95xsEauk/IZO0QPbK14j+1M\nOcRBszP6RZMap3VJyIrq/4QKHtvMKyajHk2zOqqqWCd/EAb+Lthfto8cuTER\nWIqYz4zZdHC8Jros6yKSfiMN8swjq6pJWNHR4MJUDkMIT9HdOzhLVsbfc650\n3WLf7+V5DeoNyitT5GTtUnZKOQMUu0uqhsA4hVk3cESssyukaBVyKvZwFQNo\n4oL7370MJwiCPOQeChpokJyB1Qg5emTx+zBoAhDs5k92MISTgu0ZjNSYIBE7\n7apgOgXstMG7UtkjRNi1Y3TvpbpM/TWFlSeKl5DinRUV0utiVktcywFN7/xk\ncZk+ms7rMJqCY65UkrjHRTvrEhFqMvpLgZs8p19c+GVaQBpDlXG39BWxSpev\nxPUl\r\n=mE8H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDYrlhl4bPg04j140ge1v9BDXGApuQnHLdnNl4WwW1aHAiBBRaakYKC/VjHRKMcQXnAv5xtwoEa22ARRkHCkC+BXUQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.13_1573717734590_0.7937163430898535"},"_hasShrinkwrap":false},"0.11.6-alpha.14":{"name":"@react-ssr/core","version":"0.11.6-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0c5d863c2c9a001f14c920c2026064d67cc3ed1f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.14","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-AXUDwKFImWptgvKmUXLnn+LphMgcrezGtJ6CLQMFpcCn2ZnT4HfZU2eMkJ6nESCz5KUPejX466XhfeX3A54YBg==","shasum":"9519336be76d4d905c5401ee73f0bb9d7f02bb02","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.14.tgz","fileCount":23,"unpackedSize":43972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQivCRA9TVsSAnZWagAAS/EP/jX8tkhn+OISyDL50cTP\nX/8AqM24/JXgNIpGZ3LpP6AJWZLXs1Ql/PH0yT2hXhnWmX+Cedo6BrRbtni+\ny/2F4AoNNi+K9Fb0TdDYsy3HJYGOk6gc0DkGGkiOR24+pDt9luw7nLVM3CjS\nUzewUHB/1ThzBBZSLLLkze8p12cr2bjoSIu36CAgA7mW0nxOLwgeKJcu55Fn\nrhhsZXCmRx5bdKSJTl56838h1NB+3sArLBprsa/10gcC13bmfVxiinDATdja\n9uV5vj4Y2g9ghTI2WfZyUlQ41WB3Dziuykzx1e0lewniQ4QrLq2mhQypUZWA\n3a1/z9VvErpNMFJBBTwTzJvfMEm27w7wKgyrRz2TahcVwL+nhQWB+GvrDb7y\nOLmZ1Waw2DcO8B9kjlT0KY4I0VagEhSP5F3RcpYlBJewXzJTo43zKTz+znt2\nJIalY3EeKvk9ssHPUpcWS+2jLwlh3pbQerhKZ8/iD6/jXtsoAzH0hF3ZGbpC\nDvTHAfrJ68QdMWScxu+pNXKTGxrNoEhDiBE+Y2T6gX0zkwv5YbI+1C8Hdunx\n1FHRjqEuLIcBt+A5dbzrwxGJ/H0ALhJ9BV3+Lb+hn7Je0PnnY0YLY5MRfSxy\npfsUoHGkIXB+L7suy4EMadTmF0eXZ6x7V9L2dgGCBOyjGyBbi2SYgzqmMeH8\nQh1t\r\n=wHHH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+TjC4dFn6rZuJ040vSGuA6I+yWHaHPbLVnscM/JE6BQIgXgy4tuHpg66ayHwIQYZCF8iYA2/twfXWUf9BlVvVWes="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.14_1573718191215_0.3292078920374921"},"_hasShrinkwrap":false},"0.11.6-alpha.15":{"name":"@react-ssr/core","version":"0.11.6-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"4cdf8210e936681926537d73674b7b65560152d2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.15","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-hHq2lAyBD82HuDuoCRBuqXPWiu1fCpPWFVqG5USAgd9wtMXLhxkHYhcZakS4CX0QbCAYDtfAppgQ5QdPPYGvOg==","shasum":"759c348874b8b1bd665e3f8eacf905fa5eaad437","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.15.tgz","fileCount":23,"unpackedSize":44096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQktCRA9TVsSAnZWagAA/u0QAKIc2KLIx0+mP5gVHcxu\nkeCJ3006tYFN1Uiw7hrE0fBSbDtPtcEmc/GS6524sDmvZKWFgcti3ThZHQ1y\nqKo8w2KMtDj7c8/wp01GhnUDBRsyMQTXZZPeNe/6l6AXtzsX6xICza9BbNum\ngI0TcQWGbEfdeDYKTZ5OAtRw4zg2g9i/xwI8tGceF3yo1qqDLyodpJos/wzF\n0kooDOemoXUsxUaiLucJBpmdDuvYpl0CgjzQcTJQ3Kyd+XW/qmcfIWhuZsR1\nIR4gAtLhAquMlfQeFqBce5rJxs4yU8YErV40ZCPp/tOy13XyjplwzEiaInes\nbQyw7qmZcuJM02Q4wY4A1GxirKOvGwgjo4HoaS3Fsn3f8O5D1M1yki/tgQLo\n+K9gx3OIuujsPTPxd66ZN7qvdffNaqqsp2ZrocguLGQC6HhTNN2LH0mbHBZc\nSAtQ+UrhRwjXKHbGkJqXX0+r8FbbHGcwKcSpk0UYsZU4RPKpUMr+ExC2LQct\n2lq9sKdbwHmwCnb2VXDCuYfPsVaklkHNu4ZhXVjuNN9qRkhGzIOcnv0xxQLz\nbX6RG8Y4/jYyJWgjnwruyqS5w69ZjSf1j97qRNofzqHgSBxEqAAB7aZiZIA6\ngZKskkts+hB8fjoIohDokidJD9s2tG7dtvpzBnUOb/4ry36e243SxecSk5g3\nZOEJ\r\n=wQJM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHF8AunLkHbMA6Eh/2+880uma3PGPMR1vcc/mcNER/7tAiEA/C4/tFVyoGpRAtubvJTCqljYmg7y7gnsgNYB+g5Pys4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.15_1573718317336_0.36021703584172626"},"_hasShrinkwrap":false},"0.11.6-alpha.16":{"name":"@react-ssr/core","version":"0.11.6-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"510825814fa07309e0d61f41d26575266354f3ef","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.16","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-pff2FLsYKJs4rL8Oh17/cOHZToMNgU4YQL78lIVkzw+qaPvoNFMLiQ3YPiMcMlFHsOR/BlYicWp4xUuijY50Mw==","shasum":"9ee4eee8caa2b89cb04520d484dd2cde63a4d748","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.16.tgz","fileCount":23,"unpackedSize":43909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQqACRA9TVsSAnZWagAAig8P/3cSqSSlX6XpvHJicQhe\nFxZmTSGW8pdoEWzOm+bzssoHxevoaq2Y+9lt0wSssHsaJPgsLV6M0TnBCJrS\nUJKY7M6ev5/974pWqXy9MA+RLrgRo+PNe4yQn79hRbAWeh/jQboR71KRVqqb\n9VBL5n5UEW2vp2cJEIv6gW/0S2GI1V49krLE8B7jYHgiXNS6r9m137kpekrh\n4WxMJwrLILFpyp6o4xk/xB1az2vfjb6Bf8c3VfGNHzzMft+2xSv5GwcqfDcD\n1cAzBE8f0e18o+gCwVHrRa0wlaQB0xi94dWr2OGjN7n4PJ7kzW+Q5SJ679jU\nNbxfi541iRV1RNI+bt/ANPDdSg0t1MTXxvyiYv1LiGRS0lB3xZ5sED813Omd\nccZa86Q2XWGILmO9V/I10SkyuXsC00tqZ1aJMsWtqTcapOoVgoYJXt3TsiiZ\nVs+k5cF3tl0sOKmcEw47gTlEhoFSZE+t2hY5yuZpptTDrPjR3idldlB6ZI9c\nV8EDtl4r3BNbfb+lLedEG6e03OhaP5p4ngbWMPU//SZNvEwXyxB78aZdodGK\nThm0evIWRV5EIrj3jTWym8NS70v3adPJ/LPNrms2hekEbByMNmZsYXXlok0h\nB1lo/h7mFfTLv59As2Qrfj00HNdmSQQ3dff/nBwgvRDg1Q8iPA84cdFZXa6G\nhW3i\r\n=Cdox\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTPAA0dGehprNRX3qVkqmM7e9tiEwWwDzVEfFUCSmK8AiAE1PiPSOZQWWt9drOm6qtT9jExZBoAQbK/zr7f4p0MYQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.16_1573718656476_0.23559458692120927"},"_hasShrinkwrap":false},"0.11.6-alpha.17":{"name":"@react-ssr/core","version":"0.11.6-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"16bf2caa7c4a52c4a97d9fffde0a23fde96e4b74","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.17","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qLdgkkgdMjC2RntxPxfKwcPiQOd3BErW2X5wlYsR52utoSsRksVp9vGltCt8faniW81xcW8QMQbVRHxMhbn9+g==","shasum":"e3da347f4e84508ebfaaa47d1e6ef56523f8dda5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.17.tgz","fileCount":23,"unpackedSize":43925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQtOCRA9TVsSAnZWagAAhGkP/Ah1KBS8dT0tPD7JnDkV\nCbFW3YDyVBiR1C/gkYGYHKmLvTn/+YR/KxnSEmehqKIRmDTQSZYqgyUFjLyF\nuKXpPJ66OQiih5RPS9N8cMIH/GqygLX9EkeKZZAiKOAJ2Bs0h1MnYeGaOey+\ny1732IOxHBxO+nePyPntF4Hxo0hh6IpMpomnQtsgDTs+5TLUy9+mF3GXDDV/\n1HCJ1AvTwgjJv6IbcVm5YsoI4EbPM+/jmOlIt31lnh9mEtR6sTZw1zp2Demu\nQ/i0j1HT9hp2MzbCmAThjPjOz8JKsZCnrplWMzBg3lTa/PIaUh4ijtJ0zukU\nv0rB+kDI0m8zzwmnXoylQjrRXXJ8Or2HSedhu0hfkw41jp9n+qV5yX84mw9s\n5I3sctJukQtCdhuY+kA4gyOa7109tXRfmtqUSgE31wxGC3PaP8yvIOo7c/no\n7UMrH5LlgB7t7masaQTynQD6/LLwYy6XinTe3AYT1nlsyrrLIqsIAeopDL2G\nyIq2gFIpL51twk47XSWrYXTYrDJToBZ/IKbZ1YgkE9BUlbeLHF03AYt2meJr\n593adC0YyrvxYjsaPEEtW+RhKHV722FnFzaSKEX/ap85dcSWcAt7eq4MNDdV\nLfFhQLx242Qtf/HVrcLjjDCJuUJthJ9969nskpwqs8fY+ZdS4pgOKloYUDef\nKwOb\r\n=67fb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmgu7apXjrh8DhcRygchRrP48eaj+62wAy9GHM+SJpEwIhALyisA/dvj/iK29QxMY0frsqionH4VbqyO4aXh3suQm4"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.17_1573718862088_0.42517318989836084"},"_hasShrinkwrap":false},"0.11.6-alpha.18":{"name":"@react-ssr/core","version":"0.11.6-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"24486f8ad05e449dc237b4945823ac4b6232ad93","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.18","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-MLrze/GbkDYnTNaaZ/uZYk5ZvlcZ1bHoZTlYEYSHRKA3hOXKaO2CE9/aUowQgYG42K+aPji4zCY9Ujpu/3zShg==","shasum":"9ff866afb8bc18cd7fe4f81b035c97e6a46dfcda","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.18.tgz","fileCount":23,"unpackedSize":43950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQvoCRA9TVsSAnZWagAAIHQP/2i/eOhClw4pggwlr2Jx\nwq0AQNbEOjf7/6a1fcvEK/cV35oBptsIfXnpvEnBGVDZq8NQDEoimjeTsVVC\n82jVllkshbRul1GqUUW2CMpU8FPQDrrp9gi2sLW1BKPrw4Ch44i7yEciY6au\ndI26RZVbSU0MJwKV0u1/utsFy7LCdvnUx4R8erQausbiuI3BESJ+AzOT87V8\ncRyHs8K5qNNMngf9bPQGw1DbT8GIOVxh88MLuGPpI4ZlVWp0kbiSzqAMV0po\nn980WpRjYX313w0hfn8ZrtbtVatnBxhog+Xx+vY66SxA5tF9c/+3xUm2yEvg\nUYFl3UXaZn1nx5zoKobt/oremGEz1znaEoyvniB0hg1ZATE3nlGLvg9dJAp3\nQkC/1o4upkVa1lHsw9wGDbNgmb1dqrTl8mXnuLr4P4XCUIBq8uBTfXOjr5YU\n3gE56Oe2LC0nv9UfZ5OscK9q9EIql6O7jiu38JoHRjVC9hSSCKlAnsJkhqpw\nItP+ZDvvarrJwdgZgb/LACf69i2r/g7V/1csSN0bAG0ujKM2PPZxNtFoKJxM\n5YqisXOpgyXCkkeqBfzvCFIGzd67olSAr47DMnFYFewlkYN7kMORGtWHeLB8\njpk3F4ar5YPW4SlvqSqYoHEvFSpCR9pxMWClIGzUTQxyQtl1Sh/NWFTGQOFD\nFflP\r\n=Uvzs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHfUMyn2q2t1m8N9ArPd9Dq2qreQic1WWXZFCMBYi3o5AiAaFqUJ5BPR4KPsTZ+s7+gjnzcaFZu7Ih4MAttp/IU5sg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.18_1573719016404_0.5322605438560504"},"_hasShrinkwrap":false},"0.11.6-alpha.19":{"name":"@react-ssr/core","version":"0.11.6-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b1e8a357b0654d821a61cad7b12cb5cfc4a68eef","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.19","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TwNA0gOgMZKgbK0ptxlglgBNn6L4K0tCAxlcMRGLHWiHK/Oe2Q4lu4kDyHkSrnVMMOlP7MgLoULsQQ66hi+kUQ==","shasum":"c83f193bec3440ba0be83f6ca5cf9a16ce9ff0fd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.19.tgz","fileCount":23,"unpackedSize":43905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQysCRA9TVsSAnZWagAA6U8P/1ceGoaPs63Eqw7ti4yP\nKN4CMPDHwy4r+7sumZUkzgEvgLwuChr6J51nM1VoMHWr1JEUVRysb29hRyRS\nEcSDQfAqqNdEJ+aGclnXu4QQSRGWR/IxKOBpuqmiVFkpuvu0UGNnNz0j1otv\nIetHO08TRhLBlCk+grd5j7KZUTZsIImk4jnccNcuos5gUccNQ4ocQcupVdog\nh/Jq0i04eLl1liZKJM9uL2wh13ors+1I5irPN1E/oKQ592HxoyG/DADQNbbO\nZ1+M2afPyyU8vJ0wzNDgCNjkP+MFnxvG4p3BZ3GMmSXl/nBr/zKtQNI5RnJb\ntTYEafsuihFiS9gUxfumD+JfvvRggksQGM6QHDpf/q4iEAxFoj12I1TyoI3k\nU9McAXh6FT9d5RAe/eqFc1pHWoIegJPUaR3sLKT9cPa90Yd9WJbHKAamvNb5\nm2LcgB1hrOn7gARBj2m85S0LorHCHIUwa9q3WCGeEkRJUtfdOmYUwSm1Jytn\nNZjxAY2Wi9tgzBUpgKxgrCA8RpKV0JCnBmE6Qp0ernHy1q3LESkwDavCYlhB\nLt8aXRAZDbwr0WhOP7vio/QzVj5qXPDQqiVMdXj7O0O/SmU55yEfxGNeSD8A\npkerb0zjvnpzJSTurUuGOmr3hwg73OJjhQ+4H12j17kH42eSsvAiqBnoAv5H\nI0MZ\r\n=r2M7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCer+odXoScBfwdZcbcDaDqDiQvyeqGRFqV5jF20BYuygIhAMF9CPltQDgkxABqN3IiEdal4n0AE2kEWJTd25Cr2eCW"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.19_1573719211874_0.7652624728111803"},"_hasShrinkwrap":false},"0.11.6-alpha.20":{"name":"@react-ssr/core","version":"0.11.6-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ac223d128b7ca9998c770190828349629dc216e9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.20","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-nnCMhuePzVFSrIpLZ4XvLJWBcLPir1FLr1c3AtbHbPtu+OaX8dLSeCr7Y8vyhpu98P2tObdU6usgN/zA4MifsA==","shasum":"c2aa1a1c3372b57ef5fb4870650ed3b35a629eef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.20.tgz","fileCount":23,"unpackedSize":43931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQ1ACRA9TVsSAnZWagAAi6AQAKRrnCjTbow/iVccFHNV\n39ij5D52UNS90glUpdnXfSnynDsPet+Yg6JIjkoSPeGHUPeXlW885ms23YFm\n8/EOxPrBtBN2qJ2Gxp5lbzhPTvHyY0IxpULGWvUFSv2ujUTX90tH2ggqsDro\nlIxlPaLCOWNZhHp39HWQU1zaiPzpxzKdGL8LtVDCu902WxM917e7vAd5imyh\nj5lPiGIjvT8zsDDJS7YZ9YfEkQMniV7gK1WQxidQxNbDAw417DKLTzWvrkMU\nsb5QyPiaWmhMRZ0RK3EJTk6VL/iXvign9BFQd7NqlnBcIrTKO7e6QNqlWBjx\nlewlWq5skAAsYRm4cE6G9BrsZeMz9ZYFfnEPR9KzzOUadattsPNRvhZhY7/d\n8EsVewkh9sEfP8DWJgjTFcTCNY1egPUCo3nukOB0pPZ8ogoy5KLQx9wmG4nA\nPePthAv/hVGdv0Y0A5o9TeCz1dfFILA/OQpWbEaWeZ7g/kwHhPtEeZtzT5FE\nLJEyx2bQN5NI0w+cccnlf43pz9B6yeU05oRz7/3HQU4ho182eCOnb73zxueK\nJnk36lbXHYVm+f+9YOifbzRoo7Dp/85NEl2JPsfrfc/WdR5/b5gpHppBMXZG\nb6n6Y/jUuuj6DzgPdoVvTkljCq6tnRgbGEO8uMW/OKiQr4huSAh3cV9PPyPC\nvtQc\r\n=G1O+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIyieU3yyEJEfVafDGgLhfXDKH25QeABFnkMrWwgEo5gIgK77dI5MiR4dZ8kz7q+kR5o97gCnEnMnf4LkeXpueDI0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.20_1573719359591_0.04917124267864925"},"_hasShrinkwrap":false},"0.11.6-alpha.21":{"name":"@react-ssr/core","version":"0.11.6-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"f97fd98f295d44e11eb5b92553a905d82e90c754","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.21","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-nZgyu3G1RvVJniLtMRRwyQT4pqKddoXHYCzw7lD0yVFilMebXPTZ3/D6kejO5VKNTrmTbOLmVaRMdVa7Dj6SYw==","shasum":"3af9e4f6bac338be29666c6a2b5fffd8c3b59610","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.21.tgz","fileCount":23,"unpackedSize":44514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQ8oCRA9TVsSAnZWagAAh4kQAJ/HFnutT057YGo2kshU\npu4LqPvUvLjHi1bdSNfaMhhtU+vj+1JCBjvqtLf7J3uctXruM9SeQml2JYvh\nKwd9DlZm9cUvsMYskfZ3C2oDG3NQfPC/La1CX38de2+HyVSCG33QQ5h6IU86\nHlKOGMb9u97v2HwP+Gqa0k72sUcXO19cClKGQBqVfLBoBFm41wZt7H+prwFU\nyL0FdGExOztWsNaMp2/hAayQuwBuSXyll4rQ9pj/nC1LF429lFE4y8nkNqvy\nhQpeavQCSH70PYERDtQ9yprwvyXp0qXU4FSZlp1W0grLybUMu1qfvOM9AkGk\nIu6Nmt7kEhHOVHacEcAoyF6Q4ecbPUUfBggQq8mjOi/iP87OCcvy4ee6vUmp\nGuixEB3EgyszZclK0WxRNvdDRh2odS31Yffp+jiMMOnVTQfTK1CK91+uIWRn\nWNJCIq4t2AWJvXbrGf+1Bm/SKPfTK88vrFzORApBda4BgmKYDpzw70+UwOKC\nqIts2bg7dHb1H5TosCOh/LZ+ti0YBYY6PW+GehBI85+M6ZbwYOU/5s+8Iro1\nu4Q/5dQVAg4D+cdtpojnOaePgxB3XWrBlT7h1TAg4zuXpmasqe8kwvQ1gt5u\n2JVBUQ10d63WzNCC3eTR2nHFUJLi2g8iGojSkQnlxFLwAaV9RLZIfUakA3wM\nThkM\r\n=vlZS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLin9YSEmjBqMxLznefBtogE13LZ/L/PuGE+dEPn9mkgIgLsQd8E935w8PAxihmICnPmIGki/jmrWmw/++/dF0Z/A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.21_1573719847715_0.5405564445465145"},"_hasShrinkwrap":false},"0.11.6-alpha.22":{"name":"@react-ssr/core","version":"0.11.6-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ecf0af84119d7da948ebf24d0cde2b0799452839","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.22","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IWOsgtyriut+l7iaXB/Co/X3oyetrQpmxvV4q9kmB4quhI+WJhn1nIhFMDtpMYUkkawPBR4kIfPUj6NN83nLIw==","shasum":"532134d401c8d6da034a15415c20e404b10fb939","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.22.tgz","fileCount":23,"unpackedSize":44525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzQ+8CRA9TVsSAnZWagAAErAP/A6+rQLCeGVubgUcyoKW\nYt257Cl9R4nrKCIJ8gXpjDDA0H8TJN3E9Nplo21vcFPI+5i1uRq5UWObyEFT\nYGW/avrA30NZReRPM+quR9Uh8F9D/lnplfS1ewuyvggLbr81ZrvdCj+uftvr\nq+gOykh4ofeAjw4JVtb3rbnfzXulocYamHXe8Fr359zIS8IOZDe7igMGKKUv\nUMKZysnkunLkgDQmGvoCHs9BWCArh79/j74K78VsQ6YwyaHV1PHTJ7vbZ2K5\nXym6gKxiLWVG+rHNiZMg7jSK/xDAD9iaA1PX0VFw0GuEJoyxUS40N/Pmpzqi\n8E7HEtz0WFVYQhWsrIoDfdySMVIbyrLPGc/dyeKBVYG/PVzXgCSxMeCDIC4I\nHa8+/PSeeQQJwbzLRBiOGniyDYf9pEN4stFaFtfuQ3shGcDKV8LnLBYveJFm\nwps1qMYU9a7uAN4rpCIlD5AAPCrMyXop3lvfN/EuS1cq9B6GvzbQsUpIj6fr\nZjaV9xuQi9OPWfirE20qIeZ/23XwGjxELQyH6jCeHxmvYcATCcAjFMf3/SFM\nVxiwPt9oIZ78qfuF44KJOh78sxlHFFekgvp0225UQ8jVurrTUNySABnQpuP6\nJQTi/JQ0lmfnBu87jNQsq8T956sb934H5Jc+f/QcqvBbafO1I9ZtstPJyBjT\nEFDC\r\n=wjo1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICfGwxIoOiIY1JEWlU8eximnoih1v6GXZOBpwI9sde4sAiAhX80SqWIYrfcRQJrDxpxf31ly3ncsGfPbmYGQqGIQjw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.22_1573719995659_0.26674417141856877"},"_hasShrinkwrap":false},"0.11.6-alpha.23":{"name":"@react-ssr/core","version":"0.11.6-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6230457c99492896be802300e8b759d519d4872c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.23","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-p8J5keCapdlDfWZwuSrCh3+cxXDSnHIlWGiLhhWeNNFlstSAsIK/pLsp4c+UeDND3YTHBVAOJrfTNXsWw1z/Lw==","shasum":"3fc8112590bc2d94dcff120f5c157eeba3bdc029","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.23.tgz","fileCount":23,"unpackedSize":44506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRAOCRA9TVsSAnZWagAABLEP/3PB4qqrJrPW4SWSIXHi\nhZjbbN7BuT5xKVToaYgwDUKOLeHgOVOgIXuoiR21iwMUELamvURVJIlYVnvp\nwt9Oqstf5pYHeyvFDOJ7u5yB196vH+8AVquAz9mUQj1Z39+TXZm6fdmUzl83\n/jy1hVLMKGMu0H/eQ5B/Zi10PJjqoYmbCUtZtYXXNhm42fuIN4Q/EB/Tnccj\nLUPsZ1oMPbVAR9H7ZUPbYe2Jsubsd5TuswvMHThHkLZDpTsOU8N9damwQdkh\naSThqqvBWqTB9rjSjwlMjBgBDWUMhmSXq2PIVTC6gdtwnGn31RLnkwTg7BNp\nM2gMPpzWFl0NJagY9sTu1vzy2QRRxsqo1Jpq3XIQSJvsTxrMVPd2jbfFsObF\n1OKtU+NBuaufd1JRvbGKZ4xmpqrNTvLcNp/xsPnG9P+GO6BDPnHDN1UFs3di\nQTs7wbhuzolst1k+jWOtpQFt/JY0B7nups+VrMjfMIsNDHxggqgX+LjS5ZSP\ngLGfHMVQyJ7xRxP00e2Z4Hapq6Cat8sbaf/V8R8TXBWliYbGGzXyAAiRrIl0\nj8M2fsvrB53FbvNPH9nfQCCw3RsN1pJm5kOGmllVTobUw3+7szw0UqLf9L2m\n73KWJPAEUWFW7CGLrDU+IVlQObPhpzUkjgp9UOk//SNiBfzMJ/4o3fzYdTBd\nyf9f\r\n=6er3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAuUsv1OF1B070PxMBU2QVt+QS8Lvy1KqI+e/taBGJ4kAiAX851cPd3mrezYkCkdWYlAY0GTxfvZewEpq6RcpKPYgg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.23_1573720077779_0.877253468492339"},"_hasShrinkwrap":false},"0.11.6-alpha.24":{"name":"@react-ssr/core","version":"0.11.6-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9e7ca9c3d71740b97b9b6827d086b5661b585519","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.24","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Wpajw65weHijm/JWapuzfGdMmVnouMr0IsFqS9i9Dhw+3liwEAFGugPlqE4XFZFh0XNgB+jBbQtRROjhuTUC7w==","shasum":"dc11b922506afeb1f1aeaefdd9b400b1eff48aca","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.24.tgz","fileCount":23,"unpackedSize":44276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRKPCRA9TVsSAnZWagAA+yUP/Ax7zB9uerLT+jG2mMCc\n2Vc51BIF16EtW3mRv1OoBca5mgFZAC6x2sF6eAEPq1FSFISTK/jvzuGUB6db\n2kwdBx0lgN7ZKXp7L/23Xso5GjjAn2x0wT4zwDs+ZEvJDsEYEn+DtS30Hu+q\nILjDpNpRhQ0xpRaXKbWAxg2vyfZaVeg+I5In6d20NkaP3RJZomewYP6RULEy\niVv9Es9v2S2dIoXKpnota7sR7hTXrjRnxfgmg15uiT/Y7VA99ImJ1wtJ2OCZ\n/+ReIGwHGz7OsXS0dNTUUOoxcGG2S4FfyLLEJ4XZ/3y63z/fb97wZfyi2RzD\nh8bXt9NwGw9YNY3oHTYw9SjUZJ1c/YdRzg3Yka/kEcBSSNGo2ImP67wBfHVH\nKefoKS6saweoyIlXR8lKFO2IHEuaCU/TYGLa+PAvZmSLm5zMcZO7JPzxZwHu\nulbG7/7hVyKcao+Gz2GLNpsDAQEuqnKmyNjWcQcVRmaSoZ9cRe8y4zxd55AL\nJmrNhkOrhecBw7IfD0t6LheFQw5FVW0fcTZfTwZT7eBQwmBlSaA/PdgPR/Ji\nijquPUXCu75vYo1K/MJP66qA/cYFUy85g6P0EIBAbgOhXk5XkYNVz3elDA7z\nwr6Tmspliqwow6X4f0onnq5b13lLRU1PH2cXzz94srmdDxf9XcXml+t5/ctv\nvjxz\r\n=1712\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD58EK6FtnYM8BhFJWi4uQVW9g+3nzycy/mPLTa29cdugIhAJB5kQJgWMhoLgKwgFL98kpI1HWZSFdPDIxmaLPH02XD"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.24_1573720719160_0.5040192699959432"},"_hasShrinkwrap":false},"0.11.6-alpha.25":{"name":"@react-ssr/core","version":"0.11.6-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"aa627432c2448b432d192ccc792e0c100a20f856","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.25","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-fGyemYR6MBdI8NGAOOsOPPCYsJ+BS7fN5cNYvbO/zuCHV/6t2dcujfn87iXVv8cgcsLV4g+ImRRDDxVhyKjqEQ==","shasum":"9af83fbad92905a8aeb7fccb2ec0e0b61076926a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.25.tgz","fileCount":23,"unpackedSize":44365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRLpCRA9TVsSAnZWagAAHCgQAJ0mdFkaGLUOb6/2ZFcT\nVDOPeW7ylzgKYLq2jtTabxlEhXOPFkYODAQuCOWUC5cmEDfBQWP8ea+z6ibG\nqUqDL2KhRfY4Dv2DADgsTMQnD+yN9HWFd7Y8m4UE9QjfB4xrF7lLYjiSLlUo\nDrVEQ2e5V+0wPDS567uzaTINvxCOq7tIXMKwlnw1z47rmGgO0YP+dfMHI2K6\nlLytU6PCSSaraGUIlcX8T6gjdjJ8LNla2iHCi9PSQ43fH5gEJYJpepgC81uE\nBcZxAanLxnctD8VyAj2mUC3c5dcD82rvWo//F+BrcIKFgGousVFKaPP5CJ7Z\nVBd3RhFTMkgLfJUl81wkuxcdNYoyVKjm3ixwkYXM0uHjZJs2nBeWqy0ti8Au\n3tePIykBHg1xltMBvF0TZUVnNS6OJfJ4HcKGac5DqTh6M67fEFkRS1MiQOzw\nfi5/mHc3Bqaq1JsJY94AWiNz0d62i7+8C4cvaFs2n62ggdf4mDoLNYUetIrJ\nir37TyYD+L1+Z9xAg9W/p/Rf+IsqvwK58fOwVVSTjsvZ1C/nAx/M02N5P57v\nE9t+g1PV1ZORqHZQxIsBIKljnDxc4yyGYZ0NBHq6+exceJMyKXdbGktBgDI6\ne8VNXSDzWYCAb7q2aONgL4QH3yFJ9KWb5c7vSnoFVObSSnA9ZJHhi5MKBJSq\nAhA7\r\n=tMyK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb5vL3CuIFWCyTarj8M6jWnu3ynnV3auWlFUJsGUCctQIhAOIR108ZMMQk/AQD2+PtvgVA140i8su1bJhVA9bHRYAo"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.25_1573720808875_0.6069093732809518"},"_hasShrinkwrap":false},"0.11.6-alpha.26":{"name":"@react-ssr/core","version":"0.11.6-alpha.26","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"6a72e8c732418dd1bf4ad073aa2705c87d98cd11","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.26","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-sxYtcRETO9/zS2uzGWS+wwwmVIEcu3r6Wtjh2x/R3n1Y3YyHKODU/ID7ZOuV7Vqpx4pybpEnVw5LtOJ+aC7thg==","shasum":"1bbafb25b956d67a112b2b26b13d782bdd8a71e6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.26.tgz","fileCount":23,"unpackedSize":44309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRM5CRA9TVsSAnZWagAA3FgP+wTukgFAO6lsmSSdZ+Yf\nbdlHQYV5OPn5+YlhC1KXIyQhAPcUrbIUCGECmIVtY2tqfwRajqdJLzdEnzT2\nMA24aBxBO1Zyo/sLQij5HXTQm2XF/1r7L30FzZ8k1DrxVZfgDH9NG0wuSOlw\no8NUVOXNeSyzCPXjSQjOUIh9oieMhiX13J/Jt4LeC44g/W2thtwHfZajvmkQ\n0AfkydbGTv3bJOxTKPrHYhhGUqd9mxDUtu5goocciUP6Jap3Bak385L6SPqb\n8WQkTJaO+WLs9F3mk8WhllcWD4p8VGoKNh69Sh5VNp120h7siNGr7A4wRoxf\nVHMh6qTIilDPZKYEyptgE9X1oT6ufQmaVI2dMYEGNJJPHufk6Q6zZua7NzNB\nvb4RTEA3Tx9RAxvZjoAvmvD5meEhBSwlAT86fwPjtvVE+iXnKsS9mfyuMS5D\nPcGEUPNjUY7mQllddwTTvI62UIcGUAxhqJ2NJ8CKeR6XdYZJC7TX9/YuqxIX\n9foB/0D4aoLle72xVj78JzVmpssguA8kT2n3qPqvYXQsdVVqkjQJqZ7Hmljo\nEpdj1H17Papv6SV7AiN/r0LGd/+4PssvWgc5K4JXlNoYbMygf+Mx3qthRaWH\nWmri5sAL4o/ixy1qWUwv0xKHz1uMzLlQARNDY2Rb8ni2Z2YyF5JcVEwUXLez\nb8f0\r\n=Wwga\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLqaVjKjJaN+BSz4JImX94fBW+baOIy/prDCM6SfCgSQIgEAub0dNj6UTjEZU1h9WyykKPgpdxhTa0ETKwa17o69A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.26_1573720888657_0.8161927349212394"},"_hasShrinkwrap":false},"0.11.6-alpha.27":{"name":"@react-ssr/core","version":"0.11.6-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"18a9be0847ca412d5f549e929a6f80ccb2b580bf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.27","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-c+4NBPlwbsZY4om2RfoeX/irrLtSocLKRC2TBqgg0cP6D3VCJPKk8K5azWP2hcEC712Gq+mUMKQd+mHIGdfb4Q==","shasum":"bf080513eb582ca72153d5f6f4b63399614dffad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.27.tgz","fileCount":23,"unpackedSize":44358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRO5CRA9TVsSAnZWagAA14UQAJUMWHyAaUr2KEkke03h\nZ1FTMBCV8ED8BA/usUfPvXKch0hzo2jT3/ZxBzkpXl61H+6lnpwU+B+ITIcR\n41w4UNrYcAxp5jRs8fD1w18K8n8XmftZlSrAljslmodu1wUTZ33G2yD7bAHD\nxvWuUgB7eQPbuOF/NDEqXbOnuiZrNe9JqCEuVXiogm/RboSFaHUy6c/lk2ZK\nD74VHF9HiSWpQenoakAyXxDRaUzsWhp1C3e6fA7vmYJxGnrhvJWowWRfvjok\ntNxZ/zKCvnen+kFbXwCY/42c3soLWA6vrxPHpTBBYvyeoqtY4PaXSXSRVZ1L\ne4t3fTAWF0v43MlH2pqAi17Dj2bADZNZSDBzJNkL3zNcJsDpM9s/KyfVvwlo\nzkdO8IBjQKUHAkGCwTL2NKZlnFj1+9HPbOpDtDyeHDBaVZCsK7BopzfFXzU2\nkyAPXxcFnelRSzdVxJwl4EBgqAqaD6dmW+O2HdTENs73lyN9YR6aknzkl/gg\nD1NBRm/brVwadBmd73bgSHvJ1E9H2YgQCIg/p943Zs5F8lyfyrqbazmhHdJ4\nQK7tdVMFXpn/hoGwAg7JsFJdmy1RGenic8ZpiIFZDZWvXMdwYvuKIy2gc6bJ\nfUONIYVJUfc31ynOkAeWE9/82dlXQt2pvAWz7xs2M3t9y+p1lOmMGxc7OOFD\nToAH\r\n=nnNP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyRSUU5IPlSxC+QGGkbLsmy4ADl3pdZDub8BTJRQEabAiEA2Z8PUntuMRKfqaI0GjCkp4qbHKDUq0MeADLqeGOFM7w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.27_1573721017177_0.18003321749678713"},"_hasShrinkwrap":false},"0.11.6-alpha.28":{"name":"@react-ssr/core","version":"0.11.6-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3fd28e09f78171f28be8a9c644f0c22a5250acc6","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.28","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RV157yxx/a9DEyAr4m4hCfUb5c5+WSjg7o4A9+WnS73M/bRXk1cc2dql4778DTjXiG0l6RDeV7K2rTia3kTcUQ==","shasum":"fc3e56b365c121b5225b7e48011f2be19dc82b8c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.28.tgz","fileCount":23,"unpackedSize":43933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzRSMCRA9TVsSAnZWagAAsMQP/2IryNFR4rAyuABloODw\n0uDqah5gzbhdlZwn1tn1mlOaufbm//U9lR9Eyq3N3GPzBwCcMMaGXyhIY6Am\nahTPaRra6WJXxqEVWhsIawWA96j9ukLbx8dZs9exMvrZZxwbi9ALBFzPbOS3\nZKI9N4Oln9Xo7UUPKvJ0IrJzd9oH3QIjEAuid55WyKsIYwoa7xWcfNdXY19/\nG+O9wgS8Mc/LITPqUs/pTuQcFgtVTC/CMCGmph37SqG0zhduRZIYKLXFjoRB\nUfXfGZhQrgjL0JcqD06vOaMKWhao1PImdUcPb3cYN9tWkH3v/IlRUaF9A8Uw\nfKpycCHhyHrPw1IE0GxY4Yk6UGIE1J/qv7QNpt9qLQjoyzzMY7q174g+CfWa\npZIVFDlu/tc/wB+CFY1tq5I5b0Z3hzl5XEx+2c0uIrMyfrfqAIDaN8IY4S7p\nhDz263oWlxb/8mSjrOFYmoHdeThcnIHuxKzqcJqHGZdBV0JNzPEMN9sjiCNJ\nfG4GT1JObhgMb/tFLabcsdGO3JBwIt5Drwar7Vs3BAn7/AfpkDQjQ5RZoO55\ncgrVhwLZNRK1IIU/JpnOkj/4GwVkJVwgNUYEvXmOVbZ8oTwvdeizGGUL1XVE\nBEXFiCh2meqWJCIbjINlDhyMZ813dw0afdwhrqQ3d5r3wlU2NN//Ii7/N45L\nTlJx\r\n=WQus\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZH+pLmgWHNt4ouvPPX2EC2ZPrOdmEknYnqVu54is73AiBnVN3t7iGxz2ES7+ZEnakPDaZ3rHOtsbGd6rVwtXp4rA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.28_1573721228431_0.533495358141687"},"_hasShrinkwrap":false},"0.11.6-alpha.29":{"name":"@react-ssr/core","version":"0.11.6-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"b13f22d32b69041cc0dc0b9a938a06b10316ebf3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.29","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gNFrHe6DUXGZdHyIQIDwssLMeTwaFI0wuXoHZFCgLEPe/WHidZSsjSckJ6YFz2FxbyYOtdtia1A6rgffeC/ddw==","shasum":"7810e4dbaacdb3ac63ea289b268fafe3823c0528","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.29.tgz","fileCount":23,"unpackedSize":44025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzT4lCRA9TVsSAnZWagAAk78QAI+818CDxEkg69leE+2N\nyVksrgfcCYtMdog/TMrvQijAoPff8kUtKw0x9E6LDa2FOmCuAoO9xRjT0j3X\nzjPHzhOtLBthUiPmd+o7WhXd3wnGiuFAp9HpSvEq3MsVJUA59WlrmgIKjJ7Q\nHzDwR+OJh3LV0zb+nbVW0izNA9J9pm+VOC7BweL3eY91Xq3vVCZS86eQnZSR\nq49qcJcLQJT5Ej4GKwzKlhnnZrdG+byrjG+mSEJ3Tz09VNkFPPqxjdYty5e7\nFJWdQhSaFjMKY38LEwoTRSBvtgrTZwJQ6a7eni5CAI/j4WEIWFpBT/piwvpl\nwwYSNsJO/dO+12i90IsO6D60kmhX8D1r8TH7J2YWvpF/Fs5WjKbJkwU3VmEi\n1T9aU19jCN+Rp/BF2+YksZA5rT8q2YhVFovS7qoLVpSUNrfXnk5PKHVz0Edm\nr3vk7ZxUkqGsBhfyy0En9Zik/HiQfCKGT4cXyNSPCk725tmdWrlTmZ3KOyZv\nSJv2s72uzLq1+bLT8ttoMDjeUiRqCuFJXLAvtF8NEsNlMVwz4fbg2rxc4D26\nHcrdAy75keK/WLIDhuqy6SpbyDBBlfuuyIU9rbgvkGfwJWAmX+/fAkVHLfl+\nGb5AynXU+3ZtvL+jAQKLaR03hueiEifmth58DuAfxEFOsNULXHT3hchLy1ZF\nw9tl\r\n=fpdn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK0+8qFC4PN1nrOsHWnJDyUt8yekmKxkDNGk/8cJToygIhAMdec6RXL6ePGXh9ulSVyoc0mvUyZoJ6ea+4rA6kcVR/"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.29_1573731877103_0.24615583224607307"},"_hasShrinkwrap":false},"0.11.6-alpha.30":{"name":"@react-ssr/core","version":"0.11.6-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"267ed3a4444c2d12de2a9a317c10e30ab493c00f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.30","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lRJHS7aJMVv/EbUICPBFV9iz7JmWZLKg6CoXDN5yMw1tFGU0c+Z3XzLzdnpCbogsTMin1pNNyt4QAmcHFk8GDw==","shasum":"b26586716f3083ffb05c13cbb3e006a68c0829c4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.30.tgz","fileCount":23,"unpackedSize":44504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzT70CRA9TVsSAnZWagAAJ9oP/1Ge5p3L9DC/Igv2kD4+\ngQZ+irKXOnqD1ZzudnO+YbIKIZqezJPT3oQjwcVmcdtlwWWTvgax0izyTXdY\n3+Y3i2et4bZno1pLKXJx+oVSFwSRMw/8FYekKfP2Q0xbLii94iW7VSPngFHP\nqEW5IvONr/UeAJh6t/3optsq/qSMi9bM7ywNwS0Hr/Fa6uSac17/ACdZCBXA\n9V7gnl/osMj6VtGAgQqHz9bi7FCyXtstED5CNT/FwE8y4XOmQZTOvJH9Jo+s\n8BtqkSguI4KAXi5Hp/jrf8sPTWcfMeKX87xDavnBDadX0NczIwz+79JpTxD2\nnSUIoKl1SFTOC2EgNHLdSr7l5KYST3iGmgQEkxYjsfIXRbjTg8BDC06zvols\neq6TcCrKh9RuF2pefJyWsxn+rilm5jB8Eq9ovqeghYG/hPpOad2mPavA8/Xs\nNgd711RCHYXi7zcR0gj1BibJqrYP2NSjtcps5xP1aHZnWXTWYTa6mv5FLazV\nmK3G3r8aCqHUj+2trRmvTcKVN5l1sJZaY55ff9bx+b5T1yyHfPf6DereZpgs\nW/+mJIqxmMxl+Xr6g7OqbGYFkfCqASZj6zKyTz9pwphbj4bC8lqOBJIBWXu6\nD3kkp9cn/EaNedqsMdcoT7z5+sXh77aM7h/RgAj4KFRsYDiBeN3M9Hg1dELH\nf25w\r\n=pjWz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICDMnPZfVCMo78QZi4DPdCuxOwfNrHfaaqsOuIQgY8sKAiEA2U1NRob7VHMOVOCd58PObnX0oFFROiRVsf96U9otwc4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.30_1573732083696_0.7591771546800066"},"_hasShrinkwrap":false},"0.11.6-alpha.31":{"name":"@react-ssr/core","version":"0.11.6-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"1ae86570685efdd8ba529dabb4cf9252223f10a0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.31","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-svMmcE1IBFNeJpS6m28DxMib+EFZzzId+LvNxHh1qblFFcmmHwL2smcLa7+7B5PLnuJr3Odz8ne4Remg/CEZzw==","shasum":"bd6de50807ab7c08f0498c7176f9963cbe346b0d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.31.tgz","fileCount":23,"unpackedSize":44651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUIoCRA9TVsSAnZWagAA1FAP/1+hFDQF0rg5mMqI8lG9\nlTXKJDe2IaB0pSrlb5RSHhwL5lsXGk6WHLzeTG5D/sqPnfUV4mpdAoFKotOd\nIHkHw0vzhY70+fHfodYsQ0tBVk9BantPv1puPfu1oP12B4wPCZOimgTKVJAD\n1B4gYuxF9Rc91F5HhxmXZia1DBBy4+FWKKtwbM3im63M646dLhv7uJj19Hm5\n/f5vtpZxHyPufqRjtrCkQmKxZf6cFBFfT8dGhliK3Xu7o0E1i6NCqY4B2rg7\nSqzZCsIQMPXZB0UwWofL558smZUIXfXHX/OWaI5Cg+1VTfNCblXFv05GfaYI\nrTdD6jrsFdeIwgxqVQc8IHXuDqGebZXbAqCYPOqB7cX5zS1qDbKzPsz5k3PI\nXL2TY5ddliv5aCrEKYXMsry/N5jBVi0f/SSDW/qkaBqKl+atkAgOXRPXP4SU\npj0LdghoKNfSjlWouYej7/x7TrDtw6bwfJVXhgtP656m2v1Ubcb1saR+k9U7\nhSU4GaN/K4u5juQLsyoifqfI6GCufqkbuvsoUQs9kDEDTZEjE8t8blGE7Z8h\n7WOdf7ApTpYDRpOQPO2Jk64eAfPwRMYWNhb7iGJzegUa8jtdxLf/lT/GlWQ9\nH9+Qhw8TaY1xIZY2Lp7ITYXncp95L8lB1RMCQtzK8KrI1UXDMs4IPze7uGf7\nIWVP\r\n=tsMF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYtWfspb10LI3TQMncQBv114jfgWQLvxh6eV5jZUbmhAiEAxhiP6Xzw085sjOV7fg7OZA8McOXz4yPVhgMi3W00w0I="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.31_1573732903820_0.10432235994106631"},"_hasShrinkwrap":false},"0.11.6-alpha.32":{"name":"@react-ssr/core","version":"0.11.6-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"230a5d7ffcdf3edfe979f29109c10d6c801fcc43","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.32","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-VZ0ROg/mntPpQZ+pOMTzMemXhu+0ykosL9lKgIEmTu0bgs4LWucS27G1x2b810hzdtFds09rfDN/PtPoFVPHuA==","shasum":"92958d5fc664b3d8dd3246a5b71009440dc51048","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.32.tgz","fileCount":23,"unpackedSize":44654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzULeCRA9TVsSAnZWagAAJZkP/RT4Q3gMgQLgSx05u4yn\nPnt8NSMMmeD+ihYKyi8W9/jVnJ0CtT0vT5QCvceW5Aw9tYlnfui4LN8hs2zM\nX0WJbgGJavr1BEBuw7rGghNVE9sdBUP1Lg5r7nHwmBUBlnajiDPTzkj81o10\n0Cuy1+vLp0h9uH78RnOnBVfxYaj9MJ6TTljffTX9N48LBKGDEbK1b7wNgsO2\ntzIhaKVjsCVb97QIh80WC1a7SuWbCn9EJAPOMjl7Y/6HgjQ7WCqZFgVwzY/p\nBQV4Iawkco1uKeuq3IXGHfiPkX1j6orQN4yGxa3Ev5CPjqTBstUHohPmSTAK\n53RZfV8+mMlWHbyObM/mNe5h992urWEMv57D7NSi6Kjs0btbM68lYGM8pJwC\nfqHjnZrLxDCoyXFWVSuBYdN07/N2F921QG4hzMpQSc0WAYiQ43+JwePnaXYz\nWFDVOBQMXRrrb7VjsGRGmlPYKa4AsYQSrJr5mmtE5KeqtGgkhDtxtzoQaVGs\nFSuyuZlBEZcEyUbYhE6MZB4VgY3hYJxYmKXE7G7h6c9XFHBF//ADwmvYUXbM\n/s8xaDVTpL38MI0qOwJSS3lkT1poUVkuf5Ymei6bj5OtVWMIMP5gc2vC1o73\n6PQopQ2l69DjfZ/m2oxByFEHVINvg1g4pcpMhhpgkQVazqOLjzz8+MDyMgr1\nPenx\r\n=HJrY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs4loCEKwJX0ZLXjInwkubS/+SgatyNfAicFatAE0c8wIgLVU+DDp6NlG8uaoA74Cv66d56sv4pdtYuDMkT45/j4o="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.32_1573733085635_0.824083734023165"},"_hasShrinkwrap":false},"0.11.6-alpha.33":{"name":"@react-ssr/core","version":"0.11.6-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"89a29a54b8acd8b3151863b7f7f172fe96beeaba","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.33","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-IMdGTJyTjtiVYE1setb6X5nuNcOXd+oFEiIwGtkr2uPpDmp73thSap9o+KzjiY7b09zeju2p3APmnOKnGnsJ7A==","shasum":"e3bebe508afc96e6acb72253d72fed57278fabc5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.33.tgz","fileCount":23,"unpackedSize":44969,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUWKCRA9TVsSAnZWagAAi8cQAIgL3b8FkRiQoWgOicIr\nIF1RcgvBkV3aLTQ7sD432MXXq/Z0TrQYZwkHUYKq7Xy21rhQWRNGCVqjg7Dn\n8Tu6/MsNTEq8HVfpx3MYiIV6ae8W/PNln7OTFAO/9XWnXPVXBNPDfEf2dR1B\nfmWlwwvlaD5LcVH9gkxEHv0PWeI4N8aH6bvnB37HRwhLja3yy11pJPyvtISJ\nPNY6L/MA+BQ8lECWngCn/tKGRVyVaf/q6Mz1w86L2m0JtEzHdImIcSSy92g7\n9J2lZtX6pj0EFgkh7pJe8RI+XcQRhhOejDG4XCDkFJr+cudY0KGUk8tenFCb\n53J0RulhUpN3F8QkRDS3Ydqat1C1YmIofR67JjszvuZn0f8V9MZm7ZnVVR84\nnKxl2FIgnybzqRu/m5Q7zP62geoTVCDaFFG4bowRYAd1qJpks1MEySN22df/\nX0KaY2wR6CJ68MAyYKx85UrxC0pAsX1hk0HSzVXLHcEIsa5F49IhbOkVTaI+\nIw65mc1cSiG3nWjLWcPahfd5eL6OIdca7lu8dbOXKABw24gk/o4mGwI9xvDf\nlzYZL7TqlSP/g4fKS/flrfZOwb5NbmQ6WGtO8cB9vQ6ZU89EWwOtabltCvTg\nQ1ROcuvyFsp41kTHPbGmXKK+s6nEqRrUymRL9xRieWWgKzVYprmt7GeY2Slv\nBG+B\r\n=1aXy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDk7BbcMzCTTB+txLBAfYYOqjROlahpEDjeIbz7qTavTAiATZxh78BIvE7OpihpF+Tf+47VtRo/jr3rdlzhxlQHg2Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.33_1573733769879_0.34060620854603973"},"_hasShrinkwrap":false},"0.11.6-alpha.34":{"name":"@react-ssr/core","version":"0.11.6-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"ae4bf0f2f195efd6b72259f5227d915f3972bf76","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.34","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-csvNs4geRjQ/fxqbtYPxUbmmtFV2G7e7qPlXNd7HQ+3pPSyKqcnCSTBVvbf3GBg2XWfaNzY7vpQlN5eDJT07vg==","shasum":"3044bddbf6b50bc3107c09d9dcdd6c38d6958130","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.34.tgz","fileCount":23,"unpackedSize":45014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUXqCRA9TVsSAnZWagAAXxsP/jOwyPksNIJwNjU7W+uX\noHHXJ5u+E46ipAKrgsvy8ISEKH0AbjHqQKmNV+fcQ0HCSsZAi/vfV0j+6scB\n3TsMybLI0lbxFKIXgwc58LQJZAVZKd22YFVXj1SxC2dN6iW3+b5N1DYWDNks\n1410PTTeqjEpHfwOLmHZ3iL/YfRcu9bI2iULq2Iz6/oisj/AIPg/my5ul4PT\nW5XAwooBjzfqp9IB31eWnApPDIPAk2yF7WAXg/u4TMl9XQrSedmekzq0XNN0\nWNi5orB6MvzeQBB5Lj1YnzsSOjwVU1jJadni57WVe+hHtiWJDr66u+YPe3ak\n4Aodg0uQStyT0bT5lU+Ki3O6iBaBDTz9T6Gu2iVuX3Ykh0Pc6ASkV6ygIpcT\nto+G/L0Y6HItLRoFTnrRn0obtIEyLaLAlCy+4qYNfp0Q60u6Ba3vLZG8UxSa\njS5ZHZkAy8MzFbBtC5to0FrmRi52E6+ZajKUKcyALQbWZKQv1zaVTnTuVGzz\nAtgYPEpEt8Jgh6L9KCv70lOwIgfMmbLN8Z93vLfwgZMLrNXl/0xforBYfol7\nhwnr5aOTjVJVb9v2uXQNvsOMe5Dvj5oMsPGpT7IO7oLmeX//pl70rX+jlrBW\n7xd3G7G/8pBL/bZup+s4E07+perRSMZV39/py6Bn3gDZXalNOfieA4L4OsiV\ndoxN\r\n=8J2y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGy3anEE6MvSaXr8BSqKZVb8Ido6s3vG+jmqw0khO57mAiAEBs0EP3iN/6Zj5iwfPX7LMt0Ndqi9fRwHb7btiXc1mg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.34_1573733865900_0.33652657349391735"},"_hasShrinkwrap":false},"0.11.6-alpha.35":{"name":"@react-ssr/core","version":"0.11.6-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"890eeed7b4a935a7ecf5abc922b462d1e030f6e4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.35","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-00/oR1563qU8mUu3I9QxStYpbC9wf57L9TzN799o4U+zs8X+bk56UNFzJ+8WlFyT4gBxow1Iwi8qMqCxln4FYw==","shasum":"8d4e97528de823013bf4aa342b8f6b390c6f8034","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.35.tgz","fileCount":23,"unpackedSize":44844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUdWCRA9TVsSAnZWagAAJJYP/2DVIOkAkYewl7BaZp+T\nlAukXRZnxDlptkv0XJLJUUjOHyqcknKhzPPU/k+TUnaFucpV6ompSntbdrwS\nK+zyMvQrAIHzaUAogVVNzH6YvFSwKYOtiGvTTqyCdSyUoQV3HArmDqrtiwAM\nUgNRudgv2EbIM0umjZM7pex0WVxV2e/pXoAoeQIA0OnNy0CT1UHH51PcXMdH\ngWtNO0WcEEVamubMyM/peR5Feu7Nq5cvMWSdmfPEVCLHKkyt3GAkMjjvRySx\nmPr5WnThwA20uJcAqblWj2WXYZy0jenCdqKseHRF4UWM9KL3RzOquw06rDbH\n2Z0r/A7bQoI2/plGDSL4pL4hkknNfXPdyJUMCdGFoitFR2irTjybM2D4+DRP\nGf2M3RrAbOPBLPjcVBXijseGLlyDjhzXnPxu9OD08kTAufTIaREkYTNSN2e0\nia+vjSKWHmXGuX6kKzFKutAD57E7oRr93i/yc/UNQ0DpjQtOpLnM/AFc9jPt\nsZtB/q8u4DoyiTlzvKM5GpuBExFmWx7Ik9f6/96gF0zXmgzhwguOtzomt0VU\ngdBLp0BDp/of2WA0h9AjoPdT+3Xc28UIz8fxjJyFPts0Eg3/9gQRciTOJeXU\nKleNCObDwcLdVbbjvFdIcsd9C6nvu23MAL9X0olsl/h43SRtSGWu1Qel1w/O\nJNee\r\n=5Ygr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFg0QeQ1LUt5IANUN77Pb+wDOkgM0V+VSalj/2mzT/8nAiEAqTz5gYO8p29gn3paFUVlhOCn1D2MEsiz8A6RhCtOvh4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.35_1573734230547_0.5156971353478808"},"_hasShrinkwrap":false},"0.11.6-alpha.36":{"name":"@react-ssr/core","version":"0.11.6-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"c77b5fb8d64db5dee7eb4aae3b0e089b73338455","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.36","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aHaa9KPpVSHeW+TkKRMufgbtdfQqwXEw3IFQRCKALrHkjatIwpcyAVvr1q1tuD/5mnSEGzFKo99TGRmTwhTrEA==","shasum":"c332bc01b2e4a10f2fd1e90642074c7a272887e0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.36.tgz","fileCount":23,"unpackedSize":44884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUgTCRA9TVsSAnZWagAAf1UP/39v2F7FG+cIYIGGV2Va\nqyuO8Y4IY1d/39R9sXkjnEkm9p+YaOM5h35Rbah8wvRIVjRmiCy4ZAwNd34r\nmbXWULoCY6h3LHrGzFvrxES0/3wq4+IeqtXi+e2oTWkj5OeF8crVLTBKpI/T\nNPnwxSvXxMh8E/P/4d+jgb2QlYz6a6HB2i02sarUnWVnwoWqJyZjZfwGs3CI\nKpjTWlEnr/ZU+nMV2lYnfzUoA00RWgpRinmsHFNNjfVxBLLLy95JNahn+Tmy\nqNke6gCsW6v5KYncPmdwB3+lFKRpN1S2796eOH1Cmj6yO07m6i3LEDIBui7z\npBZNnMXwnDEocfmsQF4/A0bJ1QOWooxp5zP+P8Bx/hSQOnLseYSKEPPfrOZL\n9DeMjBCtgJUXFmJmfWu9Jg0FU/C4ynKmAhlcomnlKO25IvP5vz6PQRUNgwr+\neP1UZDjnyqScppa3yi25dtQKGVj5TjDXtq+rtwBib05SHTeI+AgbDrvLlvNt\n2u+kAQGAMaWaHV+DvIcmQ1m0kZ8Y/+ZvLLhAl1B/PJpcHvUziPzJcawJTHeC\nEGa73HsyLmSRj4/sGnjPNRYW8a+MxXEa17j7UJte7qZdJMQChE+36DgspwJI\n9GCWa6ri4RT8n8WfCL7DGLiYSQFUFKkK0xRfMrDwyYcGgKF+xdjxO0XwZFiE\nEYyT\r\n=aiNd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEto6zxnpz71Ti4dfaImyRmwfXiDejZeXZHHBO9Y+T4gIgfiyvkftCDQHNQI094QyZhQIAbiG2t6UIuz2bWzSqVuM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.36_1573734418841_0.7663220612845674"},"_hasShrinkwrap":false},"0.11.6-alpha.37":{"name":"@react-ssr/core","version":"0.11.6-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"68da1d478499cfaefbfa0ec9952a6f14bbf5535e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.37","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Wog1s6gVJ2C6t2Ln7CaD616n48Wd5+ymJpEztNxmDWpLBhRP+6ajHCrR0sgffjjz96cVYL5Shc2t9RJgsodXhw==","shasum":"573e36180b7b00ea34023721bcf8be0a11bc1f58","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.37.tgz","fileCount":23,"unpackedSize":45002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUmCCRA9TVsSAnZWagAAwTAP/RSMKDF9UJUaAq06YnBz\ng5Yhyi5YcY0pudkmccYLRk47uMTou738ltBeakZEDfufw1O9V+4XM+uRSU4e\nhvYAicidlJobd/AlGMvfCrv03FdmXtX1bb6Rc54gv9wKkUBX0VEMYAFlGakQ\n/0wVZ0/uQDOT2eka/BR+kL7VE/LZ8BU1XPq0Bz5A8FeYXBtQF4878OiC9lqW\nx9bSFDXHSZTEkzGk+NvGwJyX/ECjMCAwCSby+7+CK+XWiGCblEbLwiZCqhaX\nHajTP6uO4eGzYhL8yThsdQKcVkNgEVCJayjJ0L3h+UX52qhGiS4LlJlnrcDZ\nX90YUZTavarTBfuEpI9ZcdG0jf7GKhoCnNG7BBS+KLFFw5NsEaSGFcZxvgQp\nqEQGwk+Qe73Xp/pMMIFEMHSQgG1Nm8Uff2ZEIte9JCrY9l+LuuihF3gvCe5P\ncT+IQQWeI/rptJz40D/T8C7MOVdPiZ/iDDnWk/HZIV5zPqxBzs0ZVdvsYfRh\nuGtjwQEZgBwntEHZ9VFAD5m6GpyMkcKlnWWWWvnvCjtWy5hWByJehhBjq2uK\ndzZ6CuNEvJI31w2v8tspJs0SBCd/tRR9oqXmoYlOWKGBTZndZok9t7Stdn9c\n5PRH7dnGVHKIXe6MfOX+xXasN3TbrJ8f+ObE2gr+f8I5gT/9mdxnvgSktkj0\nTMXj\r\n=XBL7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC043bXAlCRkgfaR3Ay2vHBCu2IRGfTpN8S6J0UTCOFIgIgKFXdFRym4n5GD8/8XY/+wW9317fmP/zZt0zjzpbIYbk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.37_1573734786578_0.6416511973273851"},"_hasShrinkwrap":false},"0.11.6-alpha.38":{"name":"@react-ssr/core","version":"0.11.6-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"40d314f27cc83b0190119e792048bc0259671e76","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.38","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qq8qB9RKnahKxw2Q2Nw9iY5BYvwxWbpq8ks7T3jLkptZ00GYpC8qOsAnT6h7w+3ZX8OlTa7I6YPW7jVyzcVcsw==","shasum":"2673e449260e0c8665b1ee5d6beddb510c096c08","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.38.tgz","fileCount":23,"unpackedSize":44919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzUzvCRA9TVsSAnZWagAA30YP/AguiCFF1KvveNxGNovB\nK7etoXijmQr0dQad2zXKVAe4VZMca2f+yle6HluU6pg9tv5IUwHF2Q63TwmY\nZOPGi0P7fmx5MgN9NKmUgs32YXs1gkqy+zEhvmZptEzHn+UBraMDo02s/SuL\nz8LVGWSZR+k9/bNtEHN/+DIWOzDbV89BIhUfJcw0Jd9dg3FfMS3FmfCCHws0\nI91r57js5d2NDwI0ZNqTDBf/A5WVwrHBf2WgoE2ecEhbPVVy2mQkUm6bOfTE\namygoHhvSR8Nn6q6vwKCjJDPgHYDpik4r7xqwFg3qbIljDxuo7I5ivhAcObJ\n+lpakn6qsO51WqFiXEHetQCf2PfBs6f+413mVmjESAx+S1nCjkzSqgCK18GN\n4byt1VIAkRJ1E8uWZwRk3zdTJde9gy2OSeoYcugmlyNWs4sS+JsklgetTaCq\ncV3kwFNfp4SDtgaS0NK1F4pCiojdfM2CiwDMarja/UE/6lvursT8c2v4oT1H\n5TEdFjWtsrnunuKjJZpSX1854o6GUf+zhKPS54gJrf/GzxStNrxKM3OYJKd5\nrpB/bVOqhoeOlcnYiuIBQOAk+eHqiCeGfj1DZypElwsIeii/moJe6BYuES6j\nTiUSIPT354umPcQTo0fLxDygFLQMtvoT8moKrIYcZo1kKA+Ejs8Ra4nyePeq\n2Wd9\r\n=VNQ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk6iQcuyRpySuMbaVC5uFttzJAcCKW4I0Qffi2n8/H1gIgHaHrQDR35b6pmIo+ZEvCgkwHhFKCHLCAwLXv6Y4dFJM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.38_1573735662733_0.6116425325817734"},"_hasShrinkwrap":false},"0.11.6-alpha.39":{"name":"@react-ssr/core","version":"0.11.6-alpha.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"a813b9722e66ae4e38126ecd6b45b1f64d06a73a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.39","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8jRh45dCuF59TsysOLdoiy9zRUN0GD3djCOqGU7I1ld1Jlbnflz5eZTtgsNrOyEfMwSB0G1BewC2HJdM2/Wxaw==","shasum":"6a900dcabf617b71c4ac1121047b5b5b969fd168","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.39.tgz","fileCount":23,"unpackedSize":44918,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzU23CRA9TVsSAnZWagAANPQQAJidsf4GEpi9XVzkoU8F\nExlyHR5KS9vDlL/R0wo6LzpIgxkrMRgYDmCdEqoOxhtnC6WfkqbU1X1E5BGj\nQP5SetwjC2QSmezuW4zX8Noti73DAAVG5tuCwg0hNsxWtdxkCZhuwcNK7CUV\nULRayZfjmeMOCkR8V90UqjlMSe/M+I6zk+Ga/dy0lsGzPhb0AE/LWZbD6P2m\nMTyPFdHCcGjQPq2JMi+tqP69b7z0TrtNHcRW0y0nVwsaaFrU5Qjh1IMPCsQa\nTnikezLqzl9gmH9EbmUX28Uv5wOLM50LGLSFdtXYTA9ZBEvwhp/JpCLgAgEB\nno+MJy7i2aVBqQH3BWpoDvVSc3Me9JxAelc3hzAfWWZYTNrFlV6m9AKz99za\n4/hKkvGUz/+8WpWTCR6RzxSoqUdvSfXyRkwpG6ifGPbnXCbwcY6N/EdZ59m3\n87CQFRyAr0y6zhjCGZSa3AmPWoWu9RldOFJq1AUq8+y95nioWgiqv4qfqSeR\nmUSljZX2k/85/eDFmUu7qYanSC4xcwc9ivOIKj44ABbnLSKDbOEhI+YkBHu0\n/5LKhniEVeAuUY16mujZ2mWUTAOiGwa/xpnYS5fkjR8FkNjAv0sY452E+hIC\nu7+IC/Dkbl8IfU0NxNhdCIZZsXADWCYZpbZCiL1QYfvAAM8K5Z+k0LlODt7+\niRwt\r\n=7x4j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzKQw7F3DWc9S3ZM6qGKFcpKR/GpAZ/bz+aY/jplnh1AiEA+mq5qj4KP5vDIqwSJGJpFVxgT69dr2t+DQNKuo+ut+A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.39_1573735862730_0.22472632828450934"},"_hasShrinkwrap":false},"0.11.6-alpha.40":{"name":"@react-ssr/core","version":"0.11.6-alpha.40","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"770adbebec2bc2c9008e3167e25659c1e2ed39f3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.40","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-imb1YsIw+HepCZCFYCCWSrZ9L6rvtvFbD4Lv5eo2TXLtYKbgsi0ZAmsRVspK+ZVHtOnECdlkcjm21qnZl55UEg==","shasum":"20bae8c83b94cc92fbddbe608d61f58cb0c3a47f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.40.tgz","fileCount":23,"unpackedSize":44338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzU63CRA9TVsSAnZWagAAD64P/icc+qbQ7OgAqBi8Ts51\nKiRRt6P5I4PKUA0TKk2kONK+0YB3Qv6fAyuGob2pH/h+p/30FwIio4a5ip5R\nn+Z101V+RYeuNkQYPCXe+ktum/53DVutCZ7I+JkjQR43dFFmsUpxX3JssyDJ\n1tgYYqUr/fAC+Brh4Q2UmY1gks7qDqLnBEgFpPa1QACQWncVBGQIvOens4RE\nJ0IZBBhHZ3/qe4lCKtkl3lgornlQwifrpWAWISSXWUXiFBVZ4VKOxv/ir2Ui\niuHJEK5RW+qW8Fmf1XzhQ3cB6HY3drRuo/Kvjoq4cLRMBdvTREZPjromfva/\nMC6hm2HftYdp6kWiOKGUeFpb5DqlLdC1AV0NB7fMa8WkVKTniM0QN2Qwb3VQ\nQKSoIliGufHQBDnYoayUs0GbM9iqXnM1e/p/Dl8texoppzxqR5jDGIW4jSDa\nUkJalR3qfZwjayOAq1Nn4L7TBVXoogNDMbAMoSLwdxgRAquwg0rkJPO4dnA8\n/itZfUdMDMrp/JXqlglvr4ey+Fqcv5yo4MKCWYq9ampV1xuK4RrEgKMc89uT\niwkSQ5a9FLI2HlCIOTphNilB8Lqpz5bZZwgDxrG0QTxUy8X8Sck6G+lg5wvr\ne4IsHdAKOZqk58TfNf6rDMiYYav4tAuB6AUHyVPdDfLWbx2egiH5Un3sUQVi\nMvc9\r\n=u/II\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsjZkr3f2YjJ+W0ZAI/JjZIks/4tYeOL6m6l8LHCnwdwIgd+EZUqHob2NoAs9iN9aZQ4Qna/kv/Sbd3pQ/c6ZDSBE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.40_1573736118843_0.12889576614429"},"_hasShrinkwrap":false},"0.11.6-alpha.41":{"name":"@react-ssr/core","version":"0.11.6-alpha.41","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3bc6482f66e0e7e4683d070cc9aaaa67ccef4bc3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.41","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-qlsHcD6qB2RJ06PBz9dUkCUqC3TdLCKI/LfG20VP7DrJyLkC9t4xe+PuXwaiP7KfU92OrY/gQPbJCbRr6NFmMg==","shasum":"6951edaba17c53cb108c132c1e0afc1d98759abd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.41.tgz","fileCount":23,"unpackedSize":44358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzU8dCRA9TVsSAnZWagAAyXcQAJl4ExR4u/IdTvr6ENSe\nWf9SYtk4hMpmRy/oPRIlgcnD0tPWrTV6aMRAfY7sMQ9mXm1iyimv+l0tsEKV\n56iWJAIbcPzuCZUoY0NOdehWVbuoRulWRPrbAgPX3A0zmFbs9UzqCtGz7vGa\njyhKC67CcRhW0aZHkG/bmNUWRPU/GDksaCNLZJEC4GhHCkwI5Y4AAoPktFcf\nvJ5e6Q1W8K5Qd8aF6NgetZ5U6Hy1Pni4QOZoxUUebJVjmje40YwNvhv2X5Zs\nvC1qI48ojp4g8vusxQ3mHSXw6hwIhk/4lznoy+/krsGExB9J1IdvHihVlv7R\nDiTFaJrz1MwwhVbw7HtVq+ervQybLuQqoosBQpHkeOSQokKORpHs5sQI0wca\nWNadPpPTWJ/PDhgW6BGHRcuf/nrOLQQ+odlEXSPdYGNVQZ3xQ5c9ykmMnzL0\nqtqLOEhDhohplpziUN/KrPR3BvGaOEAA11XYTOlsdHTWSXJv171xm8snXWk9\nyrWSPKr4OYas08+jyx0oSTGX9C86gBQR2tPyRicCpcn+RmhCUpaLsfVyP/UK\nKsFYCUgplQzJjQjw9d34JV4SZbU7xzwhyR3fNu+JqCH17YKYzRPPlW9Sas8p\n3CsyfYWD7YEWLuxpjsJ76DxfIISBJRgR3wEsKS7JcEKIdnPBxuyJgcCC81GD\nlmg5\r\n=jPZf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3oe5Cq1qXywwG5M8C1PH5DsgctWqyi3fazIKijy211AiEAlqMlWAcfLY3t07eAq6gk05XmnidYY6Sk8jXqGCiUCT0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.41_1573736221539_0.8972162166628015"},"_hasShrinkwrap":false},"0.11.6-alpha.42":{"name":"@react-ssr/core","version":"0.11.6-alpha.42","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3174c8c59f7b9e4ce23b2f383cc11144033df5df","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.42","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-R/3OLuBDJR2Bz+LBOe76OM0y4JgAK9q4C45aWq+aIt31Pur9U5nfDL4Exn489QEGmoBPfZ8y+rxJ4ZYL2UBTMg==","shasum":"06d8b59c009deb8b59a95e5875c51509eb56fa12","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.42.tgz","fileCount":23,"unpackedSize":44358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzU+kCRA9TVsSAnZWagAA8Y0P/j4XkBTsy4zAHGWLpTvC\nM4Ptz84X/zRYn5xTc7qNv8P6VoTth0gh3BcxCGoqfOkrTlVnBo2uQVAn+5iM\nJJ3VJA6EUwIvt6VoKNUdrFMRRm/JoBytspcqRAka6V4ipXYnM+ANIDNLeP6u\nlt59wurQeQsJrUybuWzkFOPI+TfK6pG6dRgNXvjhZFNSzR/nGei8z1eGi49P\nDlbZULTh+QsGFPcdtLta2E77H8R2XE+ao9Bcn9BzYftEM9xX9LKRoUDWP18j\nuEKxcxoKbezOgHTN2uC7lxbpMp8tbMrQ/CZOH29KbJjc5FJgm0LieselT5kc\nIaW4Pe340jAsCJVAvw6k15jKwTSs1QOZ876C6fygMOt5LLRWvULOLbZolmx8\n7YkSVk7c4Si3BrZxaHRPiaJWIrAo9q520y6CUXFEkdnMyZne+YjvfBqL/oVH\nSk4gRjFZ/n295pAZ8L0Wg6mVrZYhE5KXft1cj0sy+mojZF+UTqRThbtEKykg\nN1lAHwvNr6UKbLQZ6biXx7OabEQSyeDlHilNCmlYCh496PmXn6i1SblEVpgC\noXFxMGEGa/NEvvKoRqolc76qBoTlhvr9eVVLpdOAgvYgfk2GInT+qmYW/v1T\nT4CqBQuEzl1WYRiseEXh2UpA43JX0gAnqVLMIrAhLbzR2m174iE/aDR6dNxd\nrohm\r\n=fhqt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb7f/NjnNUrqdqY74dDUL52hAGo8QytGDsv8I9bvnahwIgern2YlMIFcvVlUkvP+cHubpIyM33e87kL8jlrdqQ0Ck="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.42_1573736355644_0.9247196373693483"},"_hasShrinkwrap":false},"0.11.6-alpha.43":{"name":"@react-ssr/core","version":"0.11.6-alpha.43","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5b8e5e1dd9a765ea731fe250462cfe67b23ab441","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.43","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8cxEGII9fyhBPI3hTZQBFg+LozMapzNseZEnqA+H+I7S6zW1s36zCpXT/b5RUylsqmQniqQ2d3e7ShviulOJhA==","shasum":"f1ce45f7ee3c90f5c3c9eca9123ecd901f405121","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.43.tgz","fileCount":23,"unpackedSize":44366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVA3CRA9TVsSAnZWagAAQrwP/28XEHGYR4Xd+wNZt168\nBFM+Dok2gLUQpYvz3v6eajK+P02SyXUnYGLb9gQ7h7eRxRASNJ5HmqE571Gz\nP2RXvHBqZJ1neEsQxt/WrsuXpJHx7g/PdAJLNiPWD47A96VB0ufy2XMaiUra\nwGk2d+QK2Z3LQdQmLYG7kvkiHdWD43qX3L7PRXFpSZAccwzip/OcvjOZI3Ii\n/v/F8zfB3oKk/9zAiEQvFb+Yg3u84K69VLm19pNnhZek/KmjhuCdDtr5AvsG\noBb03Cpp6r0ZqqVYy17ffmbY4mHuRSysT8rA1N1R18c3BePVBxafLDzAX5R9\ngUciDHZ2x4cVssuofw3Q0bBScyBCgEs6b66n6I9tkvIPDTWDQoyROZDzhsXb\nFVf/tXxHvS/FY8Zmy/YVB0n3yRLIlG5kXoSqqY2AHCfphMoVvO+VHpWoi7pd\nzfNOvaVlQZh5HJmtG17Wk3mGw6v5yvdzPK6XebcKbScX48b0JRifiRCvylBR\nfyAotvteTRFv6Kv28jeDnfgtOqKVlYOh8lqShb57Va9U2c7e3OX6/ElFgeh6\nXuzO0ZCT2U1f2MCrG8Zn+OGRPqJZdEyjlYqsCOlLdiurD4iZZjmZdfUoIxtP\nz/gzofeQHQ+isiUjrbGc6kBObgPVFbv0vDq/sL5KaWPFAgvoNPETvPW0n74u\nKnPH\r\n=n9rM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtzgEzl0tXt8m7uBLV8Cva31k1LDAaGf1nH45kRKWI+AiAph83zlqXMAAbouttFzLyN77uIrRjBLQvwAZEfWHgjMg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.43_1573736503401_0.989130838029288"},"_hasShrinkwrap":false},"0.11.6-alpha.44":{"name":"@react-ssr/core","version":"0.11.6-alpha.44","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"91d04f1625f29a5112aecc763d13fce39fa77d32","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.44","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-9k/LIeWp3RNWjVBJu81PJTHHna9CR3tRFT/mSQCeNJelaXHR2uRc3KiWtjHdCYH6kY9DFyFn1JWauBQxWmhfFg==","shasum":"e177aaffa915298c7dadf091b24c23d967b5e6b0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.44.tgz","fileCount":23,"unpackedSize":43984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVE+CRA9TVsSAnZWagAAr0UQAIeGOcPW20BD+5nTAK78\n2qk6ItsL4b2gOt7Vh7mwHGPMMncBw5En46ofvOJ6T/CHoVj8uQFimUQUekLe\nuIh2rnfT5TfxNZRa2cp//4E/pGn7iCIYIYrhvmSPMk55QO6h+ARCyxEM9X0y\n6XI5WVzWy97Ww8zPpjKXwsbgfTJQ6WF1ktrSv0vAvG2FO/ztOckprtVPrPcD\n0dkJMme8bnKQA60H5+LB/f30Wf1BUxTA/nsnqmCcbWhRSXyksZfEFwl3tg1S\n8lALqSZcXgABVda46zhS2+7jYo/geZ4PmRXbvkcTxG//h3kXzSr/4nW3iBQN\n7hnb23l/YTd3+HXtfTOP1PoV1Lz495bwoPmi/0wYLhpQp88vnF89H+9rfoEA\nRQjfW0fVmwZpGT/TtRbPLvHmjJytPXGRWlkv30DPqj8oHK9ZbTUGRUkz4Yhq\noNPg3/uc+I9gryMuYomdV/FFSwr8qsKShzSc53bJdkXNPUnQbQCFmRUChLO/\nHvftVXsaO7qVIdFS3UWzGPrGQgbajwAax4MgGmmey3VxspK0vofZnlZK86Xy\nD0STTk1ndfPzFvG0PV8qHFhtfpPjAJg2uRewUrej1uctf0lbOhhFZR/rXOu2\nl+fe5kYElQP+l/k5zCz0yC2vwDQdwCAyyP1E48YEY7npy9iEebid9U67N1UP\nMPYS\r\n=Qrrm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGyp/dsENMNp05V0QSnXdU0nDiYinB6l7lnDXdTpCUPnAiA1K62nmc4xezG3TSUKNx5ZkChKq5EndEsMjdVmacbMyg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.44_1573736766457_0.5259113251838365"},"_hasShrinkwrap":false},"0.11.6-alpha.45":{"name":"@react-ssr/core","version":"0.11.6-alpha.45","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0005f02c0eca3e3acb83ffa2e21880634a97453e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.45","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-aM2i6Dm2OKjH6pt6NiiXXCAtBZtlDd6hUyNBdGOrddG7q2t8nXcbWEPOXtsUFE9t7ptR3eJOv+33OHQntUcdiA==","shasum":"ef69d533032d21be6f51b57d56930a6549d089c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.45.tgz","fileCount":23,"unpackedSize":43986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVIRCRA9TVsSAnZWagAAZKEP/21Jvwre5rMoszzCZkhK\nMxzkdMS+z9hxSamiOLIlze6Jf0yhIxMtlGpMXCdTL38V02hyeKKXihUGq5BQ\noEqvz7zdTYH5JmjcURIf2WH85eu2auQPCKquvc1PLZyStpw2m0upnnDLVUzc\n3vRE7E6wnpFVsgEmTxoS3n4y1/VT74+tu25/A4wLKnw6kkg5lNvuM6t1isee\n7B6yMgK/LGxKYUkdAI4BkKX4G3Zzh2wsBF+OxtPYoqzi9Ob2ko6cIXYYEVIe\n5OQpYOkfpAn2y1MMJg5GfpIPRAnxt93xsU9yjRkGLDWhhzjMYck2uX4SvkAP\n71SWshdPgOVUlwXVlSbZOOOpKhomq2EK5KSUrVkvsJv7hAIn1B2QGlT6zFYY\nnZ7mkU25oqtZO55bxGtaAW84F108dRR2XeVGZKvCivvkNHK6OD0MOIdCl8SB\nImHvYQmiEOv6j56N3huqGPyepxdxjJf+No+amW01BqIGX9liwzMQmaeiyFgk\nxd1KRCHnhXPGd6JesERQ9tchssS8WpXchozg01qWD98MwvIaSR6bPSfRLYSP\nO3NUWLpKUisk2TG9wV3pjw91P0f5grtTF/dkXbiHLP8uA3Bbxx+1IWJE/b/B\n5HrKseAMgmXaI43qVlRKXpB0xDQ51B0mkMqOyTVem2gKplQsWfTSV7BA2/d1\nDTLi\r\n=ARx8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMKgS+NENdTPL1OFy4I4iWHXbPoMii2gjG64zmm+IseAiAZa1fUgm66FjUuHGSjl3Fy4QXiqx9XHex5aWopeknsvA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.45_1573736976915_0.9384973509124304"},"_hasShrinkwrap":false},"0.11.6-alpha.46":{"name":"@react-ssr/core","version":"0.11.6-alpha.46","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"36e7420cd4c4aced26b5f3fcc983fd09a06ec395","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.46","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Zt1gDG72OKny5ycIwsEkXoO7hjQB+ccxAdrUmfYHTAjF2bQ3xxTQeDWACl8cSMfiTPOccLRCCaPlpgp3QJj9HA==","shasum":"8bc534bc379da66acc726d113a254caa39e71254","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.46.tgz","fileCount":23,"unpackedSize":44532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVKYCRA9TVsSAnZWagAAitYQAI1mct/UhfmC91U1lyU6\nGwsgkZ8dHBNqFLf8P64wyi3anzh9UXQQHqlArUxgB+pGwH97Lo/eEGMv2jlk\nV+8o4gKmhgHkihr1PwlEDhgKWr1Icsh8rwdtXqF3/X0gNIGtFVPmzRzlwIUA\n87lA7hAqqpHa4OaA8jR8BCjvcHJslJyokfrgmaTSRv2WeKV5vjq0nn6xxHuX\n2+tVUQJSNM+Xd8ZT5wq+uCov5uzn8xcH/qlkpzfS3dl0oJG2q3XRIjn8L3oP\nhmzKDtcoXgiK6Gg5abtXwrQbOF/L1Ret4HvW1Yov+LV2E7LhHMW7fhpJsi3N\nxXkYPXj8gkP+SLTvsIQwyaevWP7+wA7BGiALaeaSBbtA8LaETDY8rv8QMrrf\n3/HhQoglPsPDmiJ1I6+6lfC9Y2p0+4Y7h3QHzT0qg+LZcWI29xUnVyPsnNSf\nw9pEy1iImP//4CGQy0qlGgISA/MCNCIHW2VVzrBTGW4FoOpY1O3x2eG0ri0Q\nimwteqAnjTbzxnaRoCDEeu6jaiK5gh/FrrYfkjoa8F9VMdpp2OeDy+eIPI1i\nGXw95OxxoAp91XibXrfO4ZhqR+OQNFGvTiVqWI8bZdhE6sa+KRjmGHOPmcZ7\nLVh4qcrz2+M6PwAljkjAnf70pLc4gdXBe0SMtTuVikG1x9BLlzRZVgp2LWqU\ns6n7\r\n=yBeQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhRzOlKEyTLRZQfQ9WtGvwhfCVN6897CSNA9T7udiqSwIgNk/00aghNub90F6OEZ/6PysnnXXvNNoxS12n4IHZ1P4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.46_1573737112240_0.29162126163112134"},"_hasShrinkwrap":false},"0.11.6-alpha.47":{"name":"@react-ssr/core","version":"0.11.6-alpha.47","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5fda5cbba66682e4b501273de0f046b631840294","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.47","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-/LHguJbGbMjqhkPmZQkyt3UTo21x+AC0xfwUH4HbjLf/qdubAP84gprPpEUqLMXT615hEzjtNNpmyqzN2ocm8w==","shasum":"c82c7a520851fda41a3526edd70e4aa20a1a2030","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.47.tgz","fileCount":23,"unpackedSize":44300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVMECRA9TVsSAnZWagAAoDsP/3+h9EzQ3rr4HNMGdnut\nafMn1exMxuancfcXKZ2qLFItZreau6J7TaBalsbTyUcIQbVWTKqw0oZJnbG+\nKczfVU3NjL0Fa7mGojV2sExfXVgxk8EYFk0V4LshGEwpVMan2PMMLe2VWIjI\n9k9oQmL9cEThCZkmq07pUbtAcudPzIYyNT29eO33Rc2ZqBuXbdFSljBo14sh\nT2LLeGODvs2bHSvZjcUewX/amJNLBtNmd0JzURq9OmXE6ua1Rnuq/JS8Bxp/\nhvu7GSNMywMKZ2H3ka5gAecyARMLAVCOsmjO7eFCYvibZ48MEEHSb6tgsph1\nEg3zZpXIGFO0lmYijLee/DbmvzHDMueimmu8wZJAiazua42D1m6uU1dbSYqo\nBdstBKUpmRQcw0awJCmKtFAbBxRZmKHb+byqy7IF7albY71MqdCsPDTogtRx\nWQSSuyzgUhWjlkf75chepMRNMnh5LUf3+qXuQojAAtWfS8h+ZqdUmcX1o2Gk\nmBCzuhY7YXfygO7teQ1FG2TjEI9RkSxhrhAZLGxYOekMasd4rOHZSR/xxQHb\nUocEA1CcKjfDBpHPOP/PPs8LGrznqhuQyTa4NfqtxkIbGxu6ss5HHBTpx0PV\nfBs30TQeIHIJnAED02NeoNc9C7092wGgA/KdlYlmZSP8QiFyjNyLv7ZJTVlF\ntMNv\r\n=cpxv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChIkXUyTFlwmkQW5fJf6vscEjyfagMRwV3IoRRJzHZuwIhAOx5oNPsK4Y3QMMIGWI8x5dkl9RkBR0rDdiHNVmlMGrJ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.47_1573737219979_0.351573858453196"},"_hasShrinkwrap":false},"0.11.6-alpha.48":{"name":"@react-ssr/core","version":"0.11.6-alpha.48","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"85607a8dbadb61ee3d6e677041dc169f61d4ef5d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.6-alpha.48","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-di8Rvv73z5mXif2YjIXdyhBitvIVyKLbapHn70Jpe8UNRSxFJ+Fv8Dt7N8lOXHR5LSMBtLTHztlFGLFak+E2fA==","shasum":"cb65dcfd2bb0e3301101e787102efceefb639ff0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6-alpha.48.tgz","fileCount":23,"unpackedSize":44313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVP+CRA9TVsSAnZWagAAiMMP/2+rEXY2sqDH+L1hsPKv\nX/A1Xbccfunk+Zobct9XcB7I/Dd3AWdhckQpxyPV/gMEHyEv2V1Ru1Or1O7S\nkM0BQ0eABy0g79sGeDRPFPqqjSpRPFl7/sA9/ftBm8SYuEMUKh189jq7VWdM\nRRqx/+69obItfe/aWqpWys3qTiFYQ65pWN0ICZ7Bbf4mM1wGbwrYcHhZxUM7\n+XhCeLXGlV1RYEFF7mgJIzxK2bGic0F1CBOh3Ek6Ml8gUM57DNezShMgyKrP\nevH9wud8Lm0IKOK4BJkPRuQBY6q1+IuCvoJKiZxjAc43We04hNCk4x86hiFk\nI4tpdFv/IALGYSKBf0NqieA5vOd2r1NoFxCNQEsYy5jwU/dMp+HhGJgAZ6H8\nODJpDpP9JS+azeQxh1bN26Vcg44kaoDOHpNLM8vOoURMkeJpxeNsjQWx1QQT\nfv/QgQtQT8SFkS4PTk1IfBpnWnmUPdFEZDnpLYnBVaOWOVYgeRBpsNnl1jtM\nA5PTU1DXpSAvtKuAuSTEF7EYkU5WiCe2I8araOJ/7V9E1WVU8QY7we4GtiSV\nGMqsWeZrcEc9U2xrZF+VARCGFpHDYMQ23tU3x+9sOzgOEBUUi1WSlR2hRlhX\nv8IxrvCHIudET2IrT7oXkRlCjZfq06RM5q18vcAZQ+JwGEeQxPVzWUiF4ZZ+\nqVwQ\r\n=RIPX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpuWOsrKCvd4mDkS5VIUePYUApLdlybPiEwtzckHaN/wIgPH8Sc0CdxSsND9B/UnRpdX1om2+0WkmC09lNlyT87wc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6-alpha.48_1573737469948_0.46275726742999446"},"_hasShrinkwrap":false},"0.11.6":{"name":"@react-ssr/core","version":"0.11.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3f0045cf0d0222be3490f6ce29b9c6a87a59b7ed","_id":"@react-ssr/core@0.11.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8oBYVXmRd5s68dcWCCClKZ6G/d6NovBmnoa+8qZCJMua6gPSi71VVyBmnBCcMP9K2pKrXtrx3bQ7tKn6uc1r9w==","shasum":"8c5db4a458628501bce072a34e318cf1490f0dd9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.6.tgz","fileCount":23,"unpackedSize":44296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVdoCRA9TVsSAnZWagAAqXUQAImSIXlOzD1uILtjdmpy\nlpvF4n/25E8h64nbZ+YKzo7M+xCgWffNyXrvjCtQVmqupxkhf58cBicQF5/2\nZLeFQesTIVcEsBDZTEiiEV2QJOqMCQFMQILRUCUOVLHxHkUwTuo4zeQnGGZn\n202L7MKznZdRnZJwq5/xxTBddgG6Mx4VJZV/NMV3CAdAUSvW2itpIL6wBfTt\nWPHeMrmUCjWum3atzVE9bm9ptoqm3tsKstrOmV7FagOWswPCdAAXTCyWCJ73\nhP+ageGsz1qdkTHzFNbovitngcz7ZXjMTWMQ5P/XQHEmBLDIuSgOmVbKF2Ux\nOF7urVbdPwKX4cesA8h7r/cBA6PYXPlHR0mOKT0nD9ieLK15gjocYOm7aZPz\nZNkt7SJdtrtFy2o93gxVRfBDGLkdMQtNchEJYAr9mnSMZz4WjkFv90YfuP8H\nAfPDV6bFLgKvHipAz8GVtDuGBQFD95eUVUVHpi2dIMAOeRsQ/ZBaTivUweh7\nmUSxD2M1+HgFp+7Cm56ZsARCoewf20P+8ViAd+O/nNx0jsvCAU1uhHJPGMdy\nj1hBqKtYPvqrpaoz9BylwcKNld7wwJFcYhPQTdmuxSmDHlbA/eBth+RDwZhJ\nDKR/yx1G9xgZFmzVApoaFqf6GiRKQ1NjpmoJkXMLv1srQajBQiUT1/zSsDJf\nbrD5\r\n=/My8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDTF/WCbqYYQoAgn1b0p6YPFT8aHGsoxqP/YnEExi0ffAiEAnpW4N1MTa+2qY2MjfzPwKZp9PExDKT7VAOibGAtp/Lw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.6_1573738344045_0.06636257931538325"},"_hasShrinkwrap":false},"0.11.7-alpha.0":{"name":"@react-ssr/core","version":"0.11.7-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"3eab5c515a36144eb532e1a22b189f028e39ef88","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.7-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BDeG74Lry/P5jBYQxdthpoUgYC6nyFRrTClGToymmSmZmDR3N1a6uUTJ3VOss7h5fRxan0dDVb0B5FVrZ34Fpw==","shasum":"5255581d4bba0e4544046d6c14732d3e1d30c815","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.7-alpha.0.tgz","fileCount":23,"unpackedSize":44385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzV2MCRA9TVsSAnZWagAAKp8QAIjRt5TlBURBjKxuP5/D\n7xro4Uq89MRNRTDulk9TPJ9+tWiNQXfSvFaSqOBMax4knze4tk1nXwhRb2en\nCHsp2UXwwVx1rj/IaKzpyh/+N45HxBr30/P1ZYfK5bS/LxLyUDMY+kU8hJfr\nwjszDgxTGjzaHXbGVYbNiBaKnnHdIzJVS3Gm8/AiIZp2R2Kqp5DYdUMIUmDV\n6IyuUk1Uvv9ZUQStfKvs/uvbL9JSTv0qclzXjldF0f0/4FiYvu9RoOpdpi11\nz/VNJnnIo7OEj55CbcSKDorErUrK0yatgIgzKzJuaiW9qfmfO0oHa7HB6aRw\nJxljBG8snWz9qxfXV18NGmuLRqSA1Etj3rjkDl9zW3LAEkUM4Fd3uHCrA7yf\nVq7m8GKWIYpqWmKY9Owy7gXl6CbeAQtE3xfUs9DjUgGnUJp6c2KBvQ4qmDpG\nOAD7OVefglCtMtKAySTNXa265eaO1HWsO1lv9LLbH0ukNPxP4195aK+bJzEX\ngJqiB1GHjpxYrLP/6035PbC1QZ1DPROigXoRCLdb3CICl2rbYMY/CUuLjG72\nNzL8GdQbaR1TlsE9vtNw6ZUymX+fkjxvj8rmO7zyZiL/hKKz1G+7VY45/gba\nMKK9ICjWVVYGgx4bKx1ZkXXVky78Pp/c1NK5Ow2sbHjaK5bKGfqf8djtNY6b\nb4Eg\r\n=2cBO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGlztjNsyQhGHIQY1IesK5cRozyO+kU+5sQVkme6dmunAiAI/4PPFAk9KQtHVORG0TZp4k87mavt6Ho5GcLPya4xVQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.7-alpha.0_1573739915660_0.8868003720913187"},"_hasShrinkwrap":false},"0.11.7-alpha.1":{"name":"@react-ssr/core","version":"0.11.7-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"01990d4d518bde2865d35b4d6513805b0ec10e0c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.7-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-M5zRnzDCtdU6jbWJ8FanXhy503nNR44k1kUSO6qk9JY+bcVwpjDp+g7lr3vXBIWGz3YOpchO5YWg49F6FJfvbA==","shasum":"74488af29f5663273570cd6bc3d5ab7edf15863a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.7-alpha.1.tgz","fileCount":23,"unpackedSize":44401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzV72CRA9TVsSAnZWagAAJmAP/1HS5DN6lfVWVdSO6Y7Y\neJT5hwqlNrSGwIkCSkZ04WfwOE5a8uTTACGGJkFCEJXB7QUV1K/QpWvAX5yC\nPvzDikGcbv3J0F1RTz8xX2kAfcpvAiJTAwpmr7mOqVM7AtvJHyWDWdfz0mUs\nJ1dFXab3juNDug8eT0lfCFUdf5Edf6npDLFE6LWqKzOvZ30443+9cQXCne6l\nQoOeMn/n+Icc+OWBPcb9iR+uVBW5KbFIg2vFz3ZsdPrdWVKHLl8ExFZnpd4T\n7az8HWd2rII9csO+x2fs6KV8k3OfBJdUiuL0qzujG/kUE8kT8YyAhS5tVpJq\nWam2FllYFqmnlSDoDqbMljIzwdQTTbXHo5/ZtPERW/gLpts3PkL42XIwmWtI\nxaQLSRvNGCQj68A2sj4NX+haQgI6JUMYZ7EZCxJwzarEimc5K4r4qo3BHj6v\neqlozXK8viSyjsz+YlePv4EDrvfoNHjzT3EjFRbYODRDOcFtllvHDH5Zya+9\nmcr8bOMtw4HhUrDwE/Gv8ymILWTRd77MxmUkpXSjdd3rBe6bXdEdkG3UmYLG\nyQLSpHaN0n5k3lf54nTDaTadYAtr1fhc81XnJO4ybTvQ/TMG1kyg2iUp0aWm\nArNMjIxJndXcEsTBMGQVEYUiT4ldewUxRK7KbQe5U1+gBoC9XVpHyOAoFrn0\n75FA\r\n=64xv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4BX3wLgs+K9oiQbwVSAlnuf6nuRG03BOZjtx3O8CvrAiEAtlTt0Lw1C6+Qx2CNpkNB9DiR7vp/8dTLJiz36c7Qaqg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.7-alpha.1_1573740278065_0.6592589548756203"},"_hasShrinkwrap":false},"0.11.7-alpha.2":{"name":"@react-ssr/core","version":"0.11.7-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"5fcce6ff6d22350db115c6ec83068281cf90d947","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.7-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3cwmzPVVam0fiqtsxTI/tiR4yponp/2Zimu83i/SFEkStXi5W7BwicmbCaZNnH29zvy0u2DYbfQA0z/0Hxy9Jg==","shasum":"884c6cee9ecd01e934c8584bf47c508d8b7114b7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.7-alpha.2.tgz","fileCount":23,"unpackedSize":44239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzWNZCRA9TVsSAnZWagAA+iwP/0PZiUZA9AZgfAg5Ymjm\nhMrwOL17uqtZzubWy/y82TOgL7IFQ4PHVlysQ7C9Fc2MTYP5n9l+2Pl2Jg1u\n3kDCAWO9jr+Ms9h0tLFNrGHYfGbb0P49e/D4oju4tud9oXZn4gzz3L5RuSf6\nye3xtaVfZpi+9GMm8N4xJsyUl0Hn64AZltbvhJC5O7bSVp9cwyxTqI5EFASf\no46ayMqZ5tV80ELtCv/nbmJbp7t0BRiZKLEaHgyf3TZ1yL2czYerII2ixbDF\nhYhu2chHJk0tHm3IZqYucftEERoqNBnx7SLOV9UscFJrWpUx6AjQuKE75Dw7\ntaWp0JbwBVczo+CcoI3vdTKKAA3bHOaBUlaRZcXmXjsfKGsa3+26jF6lJwfD\nVNAIfp8ERjf21xYtp6HWxKuP6PTOjTlVC5o6TduCNCLj7lVkFzAImfv8cmmg\nNqca1OjB9xiL69fyu1Wpe5pbWz38hgkWsSxPxwIvjn1Q1R44076bG5n1ntjy\ndgym50w9tpPWaOxBFahRJFulKlrgG9jXrZqfle7vjaZQ0r5Yh+v2gxe8M6Og\nx3mx5G/T8LEjacYtSvI3/syRZODg37e5IWvNjr1kWQ5rdlyXgZEDXO5eajbf\nTAi9asiZDo5EdqRsWdUGvQeMwFTOk8LmDHbkXymuqcaJLsTaof6FBHQq9ORI\nLYO8\r\n=BjIK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO62EOIDI1DvSmSnke7RW7v4GjH7ONQmuv/s5z1OhsGQIgAxlkAm4zq+tCDICPjwHYxWP1auV6DKFjUg8aZwgpOMI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.7-alpha.2_1573741400778_0.827084531790345"},"_hasShrinkwrap":false},"0.11.7":{"name":"@react-ssr/core","version":"0.11.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"593619755d9764b7ad8cb70d9eab814ecc1952d9","_id":"@react-ssr/core@0.11.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-8LbRwFrqtJ3J1daGXOKZ3xGBLWXdXp5XAYjEfBXK/92PO5VNyyysAyjzlqj4Uwy5g/tDFAkRBBACdCNu/kuVLQ==","shasum":"efab389e3a812807f479ef101aeef48f22402b7c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.7.tgz","fileCount":23,"unpackedSize":44223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzWPYCRA9TVsSAnZWagAA8bEP/iS6zeKDhxSDH4xHfyb/\n/RIgUjDQgGzyB/CbZSH2NSBHjFj7ILhHFQutxh7g4XLeWtCoWtlmu7PuAyzd\nkFr+Gdd9o0NG3g3/njBdPSDMC3F3xe7Rd8LyL5buM22xipBJJn+HA035qEgo\nADe2DD+IzmczaO089eMI7ZiJ93+aHtlDKrQTmxSn8OCPVsc6YF3gSYYpPXsb\nIz206mKaIRn9ViM6bSWgv7kYTnWS6TZ9EnTTfVijWXYUDaJ9PgeloTWuT+Z1\ntFbRbgeVe0TL1gRuVFNDpOCEaWbaw3p6UQ3aEgL2HVX1Z8o7ha9oIjSA0sNu\nlMvkhsRFrTHVqRnBilJfgDX9mZToUrfUN8JW17qd/jpHDk8bHOuM03iGZoEW\nDc7BaCqAwVjjM6Hks3WVlQcEtMy+sHQesw/KKKZ0oI3ZlNwLIEU8CPVRVLti\nCTH2rOBB7J1lxZlxaWFX2/ABv/96/QAlQ1M+BSIFsdBMgosG+MJP9wIi6mec\nwjy1WCsEXAucoiR6ngpcMnuxLCE2JYNYLvCMA3Wr/C73i2bCH9VI4rWuRRwe\nozA9VCRug+PdX5jxOv0R3yzqY6ymz3NnsZ0B52QwMhSaPp34fnWIb7hQTs1h\nC3h7zPqaBR/s3BcwH1wPnf3xmOobn06yYu0wLzoMCkxH5kLhrseJ1s6bq/5i\nFEw8\r\n=YxO+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC43mtnfZ5D/BzneDssbbPqNnAjlSFs7/V2UUpwGD1ycgIgGVSfoZiLMGhofIIC9/JmSFxQqg9Wo9lAyscizL1UT+8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.7_1573741528261_0.15625315432721076"},"_hasShrinkwrap":false},"0.11.8-alpha.1":{"name":"@react-ssr/core","version":"0.11.8-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9bb953e15573baeceb72809bf3a2d8f66dbc4ea0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.8-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-90yvWyX0J1ojGRP9/3B+aeq0zE+F4VpXOYvY6V2YxhdaZ+HA9ugb0JqIT2XPpcI5Wmjsue+lIL6ZopYbYHpISw==","shasum":"b2f536f0b846a626f54eb5724369b3e0f4373304","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8-alpha.1.tgz","fileCount":23,"unpackedSize":44126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzaT6CRA9TVsSAnZWagAADY0P/il/zFLi+nzhQ+HbEvvx\ndim2SiHbQrBaARnjD902hg1piEaEwGnzIPmNjyFNogM6A7R1SBNRjjlXLfx9\niQnAyiHHUWqpGIxpth+uQ6kz0tMDH6TkJhx73y0/rWb638cgmBMUJwJW2AmR\n0lvHi7cbo7zvAcz+F3xFyuUv6X2e+yLuMgHmt43ZZCjwMEs2T/W+PICLXxbK\nbK3uagi9XdSiN2U4CQZATRRtpplKv14qGqjJ6YpaH6HV/buSbKr3ia+KMJ7b\nDzf+Skk4kYLFftyqSP1tjm0QdNCkr8vhYiybLxCdr+G58bMAlYN9YSGnUnF1\nvAbjxQNmp3wfXtP4GDi2v56Gn2sxua4Ue7Y3jlYVJLT6fIPBQgrCPTlLYhtG\nVH/Qx5DLbr3knn8EY4QJ++Vonqag/rJ2UDY+YM43vzkR7mXu5IZy930eJzn8\ncDb9gjvZkdaTYvgGvSRlrp/lyp34HXaa2QPngpx5jQxPM3aB+TbD19wufwpw\n5IInSM6CnZq7PYwqT5kt5CF3QgM+FyypAITYAYzVkwiJKQ9hVDW28o6zQ3D3\nA2Fte3Eu1bQ41Lbh5AVR5eoqniu4e+uouBZN8iRBmRTcPUT1e5vi5O6cviH2\nfHvisxpf8yZfXQrB53JfMOyzsVdALDhb+NK6tSQK69GMXyzjbFhHDtfcSRN8\n9nqB\r\n=hEWj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHPKj/9sl22Ild/h2zRA99qqDzebR9T1XJuAZdPbz1KgIgQtB9G7iYj+QO/uQd6dCCScF+BBpBb3syCx7bEz4pIfw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8-alpha.1_1573758201945_0.4268796008845297"},"_hasShrinkwrap":false},"0.11.8-alpha.2":{"name":"@react-ssr/core","version":"0.11.8-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9aec6034c61c1fbdbc77eb08d52ae544a4f96a77","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.8-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-WMmfClmjmirKc07pC1MuWqFOfsPmySRcHlDnckjgu0bjCT33pRVeNv9CGzzoiy1BuVlaeyJVGBl6jRoyVeWaJA==","shasum":"e63f6fa8a6a7bae741afc3cf7029b48790af36d8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8-alpha.2.tgz","fileCount":23,"unpackedSize":44143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzaXMCRA9TVsSAnZWagAA4JIP/jP29vsIt4wGaJSOqekZ\nsKMSNtV4sgyIdjrbHwPHjnT1yFfBFzAZc+7cEu9XV6p3Sz7WL+RVDs5ag88m\nAQfVz4P57T1DWRFCPLBvBoav+hQoWq1kV50faYT5tJ2u5VS11sCQNiGCToS9\npLy2/JoMFVg08eH4maE/WnqrXK0jOlBIL/n0n8Ps8hOHYcMdGaH8fNBG3B/8\nk+lIvtc+EVGLQemUM1rCKHBu0EcK+SExzevCHJQo0bJuwpQNzOk7DYDN8aPP\n97U8t+CaT/RsqXAo4CRuTk2UjaT+P9vJ89S0G89J8pWy0EAN+luB7U+z5ZJh\nbA2LaI2IvlchQXuwtzcD1ePuYRIMTANDBMyU0G9DPih2Ss34rbXnjHYybPjd\no/WdFbptbsOWjdMUkkaRrtFaPSP+OXFdBc5ieNmovRViBi7OrvFoBL+49dhQ\nyGDXxkhXfSDhrPESkyQqYAwj3ClTS3K59ylJLra0apJuZ4x2Iv6f4soBaZ1W\n8IJGu+nujb5Y96s4j8lDMyJKss3GGuEDMjsg6RX0z932yvDytxHqC7idBFJr\n6Z0MqLdqDPVQpeqOWMNtbNpHx2ZZceN3KrsCLp3R8Px9JFpl80yVdQRqMQvY\nrEvszyWedtCnsC+DWq9CmOUG5oIM23Gfv2qDoayl3lb6EEgai+zb7V6LihLU\ncCcb\r\n=G3ca\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFb4nAfV1foRil7kqHt/VeaeflzADIwAgtbiPjPg10zlAiAt0WI7iwJ5whAo6G15OU+aez4du2Ic4BIpWNXU8Sy8vg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8-alpha.2_1573758412030_0.9123151124696225"},"_hasShrinkwrap":false},"0.11.8-alpha.3":{"name":"@react-ssr/core","version":"0.11.8-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"700eca6967b4ee0e2cfd745917b50019dce7b0e7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.8-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-+2PO3VEmcj/6Q8GYVtpOEeVrcxjVs0YXBuYMLFluqdwK2gq570cYcppDsq1v79TX8Irjku/dLQTCTeu7+zImlw==","shasum":"b375e9b5f5336ff6e07190bca299488890b998e8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8-alpha.3.tgz","fileCount":23,"unpackedSize":44758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzaunCRA9TVsSAnZWagAAh2gP/AloEQIRf8PZjW9Hy8l/\n6ZUZ2Kc0B6V9iwifvjP5vz6eKk+4eSlq8p15aR+3nfDXltVTQRaHfBPy043V\nxsmWHX1/6XDmcOAnmS8Fb2hSisAd0UmL5frP4NnW98JoWBDaeLZOUBC7KqIQ\nt9hpkL7vM5bTLDLqh3Z1mUkVF3VIwA4Gb/p1j7NQJ0s+9IQ+jTThlfFc5WkV\nUZGnSazWwzEG/9RRPBDGdfuCSZMNWRUZT/2BxfvRE/S36Gb7Yit3H4JbtWJD\nViy8FrIq4iRXF2h6a5UaX2ZHQMTzdXN9INLyREff9FVNVnLc1r7UhkOiRTrC\nHSOW4/dzKaADdXFGjO9Z7kHrKZQNhB5QBEdXMp2I0U7ZXp2dcLQBAg/UaZKw\nsXeBNwP6uGR6D8e2Jeb6ofzBSeGA4HLfwDlN5Ycj4q1LYAQr4ceyEAwFGgo/\nUjWG5cKd0PW/E+8d8WAK2q+1LC5iM2R3h2SNe+o3Mg87CWTQaeJ93ZIa+fg+\nBs7lutDIhJsz8WiZJObeTAgN+G6wn87P1HGbvq/+avaUwM9LFOR4plJXvxTa\n0zjAzBgtmFzs3jHZdBG8I7KsHRBrkXiWAbT6UwFB35Lj22/Y5UQVMmszkmqN\nIDYe5Zsm2lb2lARWjTQEVm+ZEqqvQVDu2DX+8Oa6SNNWFs6UnYixFF/L3dY4\neYqJ\r\n=X5h/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+2sTuW1gMOV4D+9sF0kVDyBljsCPMAI4sP0snB0q0UAiAKxHrZcxp9r9Q8VsYUEol10Xcn3SJj1hYe0wn6ZOyCKA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8-alpha.3_1573759911282_0.381486623471631"},"_hasShrinkwrap":false},"0.11.8-alpha.4":{"name":"@react-ssr/core","version":"0.11.8-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9f45d909d23080b194be097f6ec51b57133f917e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.8-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-e7EHTP1NZw4wJOYbCtN/xLBFzUvc4M/nQumtqCPHKqvVssnaJiE/vTQYaH3vg/PtpdqMMt1EpOK18NBDpSs3HQ==","shasum":"f984647170e271da1b003e42604df7f9b1b687c6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8-alpha.4.tgz","fileCount":23,"unpackedSize":44143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzaz0CRA9TVsSAnZWagAADCAP+wdazrTO5ZPkU803Npyv\nt44SeP9C9NZVUnJ7gDcemeDHjQUumT8OsnTp0i0bmxwSzTEAtOyU0ZcEhl06\n8eJk9gAr1KSsD2j2unW6xaXbNky7DqtjCDAyiavJtlvccxpszENLhBphoXAS\nPMvQL+5km1F/+uZHt+18VTGz+b+0c4p4Az+Au3LgzqXrlmXG36oWLjAD9o7G\n5+21C9OSg+OZUHQ9+CAmAF0e2xeaDxQsqOuMX5JPOFfB1GuMyDXGfmFg04r9\nyEDsG+Hmu5OyBFMOg83HMShY4urmVVIkJjDR99CAgh+0u760zJ8pvRYzeM5q\nhKFRHjy1N/gprqwgZxOO02Xw1Nbl52yjQ07QnnSp1gIA6IgUvC+7kKPXHA2r\nYWMvBDfwVQrgOki2zwRgRKAGXoujqLns288XQUWWmQNJ0NUuADuTgiMjFUml\nIPrnIxAxTkpxhNKw9Iz6RbI74H6cWaw0g9JSA4alD4pQS9n+bszyJYLZd/6d\nTjOvl2Vzs2Vb/RQxjb6bp/k4w0YT3dFCmeUqmg7k01B2cWE8brhHTeeOsFrH\nixSYlFpBaGQLLXL0Xha4IlNgQU3cOGPG/L+dE07PH8DFkc2lFbQzMB1IGvBM\nqA+aJ2rSN7PMX2Q4Zb5k3M0uYi2bDQcJ4H+zKHdraicGFsgwTdXfgLzVaE81\nPpEE\r\n=8lKs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrESpO0mpjoYGfGhQecsZa7xm2uVU0mgeEhZeafeLx/AIgY2GrGwvKFmEJ3K+tPx2MEhT/OBgR6/hYCXqTXHZIwg8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8-alpha.4_1573760243834_0.8432010802842109"},"_hasShrinkwrap":false},"0.11.8-alpha.5":{"name":"@react-ssr/core","version":"0.11.8-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"479212d2950eaa2bdafd04d2ecd620651f51ce61","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-layout](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-layout)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/dynamic-head)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.8-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-ptFEv46BQM6cSlsB+YCT0ymIy51W0YAob7yIHZ0NmxQKJPmPrDZQ6K01vAhdoRT9iKnqS3VKYrF89d6Q+2mvcw==","shasum":"03ef89b0e3e3200e027791c7a4f6f6962fc788c7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8-alpha.5.tgz","fileCount":23,"unpackedSize":44127,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdza10CRA9TVsSAnZWagAAgZMP/iWCr4DHjDGSP8R1t8Si\nAmPePqJcwsWjCPupKHJ/txi/KIWaplJnfLXD3EQhSXJ5L7Ha1cq/Pfp35GU6\nx53eQODa4TYgrUaPjg8Z3qxw1bIT9+qtVImYzSI7oIocXoVTLP/yZXkPRWev\nPip+fL/IFuiLxGueeBV5OYlPXKcjgotJ3RpJWQTefZZBokRUXX1ok4t+5Lg0\nC78rgZkVfjqv1JSU/Uk8zXXlZJ2wYvBFwr7R8rOLlHjHhADMyMpx+7aHTpWN\n65YTULxfw8346r8vUS4VMVI0v4MWaGWd++TZtKAaI5L5W5LoXqNK74O6ZUwW\nCgoLGNkpJX9UzwPCTMBdf7E2MtE5rE5oRH53y3bN1Y+h+sfIc5aqUvJWJqr+\nY3naWGFG26c/VYW/4AM4wxjJvvj1wkBNN4Pv95iVQsaaD5A3TFgOnYF98LGJ\nkE1XtHo/iTeqHpSbaiArA3I2gMfHRVCK14tC5a7tS9QDPO2Yp/uWJh1JLhq3\n1R5xQJuY1b9kmJsgWb8GeCm3eoPWjZuAjGPPHDoU3oPFM4AXh9XDKTbYjbo4\ny5SHDFMeJKkY/V8/cmtt1o/ehut9PfpqiPWYWltrGANhq58EQjvFq7hbxFrh\nRQmgMKNLxM40TjGlr3WqEoUL8B7XlwcrBmkiY+JcPI+LIu7Jc3b6yrH5H/4i\n9VBN\r\n=zo2K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDM0LrjrHc8XmTCzi9vIagnoCVj32qRxCUn1na35wIftQIgN0siZJJuv6SQYdFlKIkPFqRGiIfCZPTBwBXdX3kx5W8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8-alpha.5_1573760371813_0.32750748915031136"},"_hasShrinkwrap":false},"0.11.8":{"name":"@react-ssr/core","version":"0.11.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9b87e32b485cfb1d32692cad0d1260f9bf68297e","_id":"@react-ssr/core@0.11.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3ebz9zM/DmIbgT8bkdXX380z+MYc8zq39Kd8fS1ynti+UZ6Bj/HIWb/EtD0ZruUJBuCY+ChIsFwJpduD/JT19w==","shasum":"71a5dde4003f9201e0baf925bd458d92e05d454f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.8.tgz","fileCount":23,"unpackedSize":44111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzbBNCRA9TVsSAnZWagAACt4P/1wpa+h+A7XDRhefMTvK\nICOnN61M6Ip84h1pEHv9jjcMTEf6W+4y5gbpicZTeukFUIViFXwntqX1oHNb\n8/gxV8ZL1+dZXYsoWokhpGJPSljG5t5ROJWv6K9JEkBY4jNoWfjItrUl+WH8\nGVaxV3KQC6JHmtVQJwJZnnOXVyl2WEuGuFjLkMURFX2/3Mspp5wAfwbJveTx\nqbcBT39usYB8PxDaN3QwRvOpNluAa59PS5yXzBpRZc730ox1QNlpgxlCw4ul\n5aJ3vixh92SL1d/wTIRDAVcnTE6Og4l3yfz1rjNXFgnVMHwmMavYuYcooNxT\n3TQ4pBtrpz4ELcfl2P8DGQB24jSCMMFcWwAZuM5nSX9wRzTv2hij9hDtcObO\nLavwT3bSOBNGWVzaCFYwlt0b7TtJZmuLi7IhVB/6Jek0DLSeWhYZ5buXZjBq\nFEL7KcjDMjgecDHdBWZHHT/13bYObZij/TEBwI56rZFJT6DoUeIZaWQQRoYp\nSGYbe9Bmglm7Lt7GSj1U8WN88L+fy++dW7r+muxc6zH3kdmzktvncxsARJab\nZ/q0fYpQZMUv+UjgEcr1zjhtRogFqyTp6PLQSe+HeXUfwFA7/7gXyb6BdvVP\nMUODnda2KGr2sMuGcn5sY20f3JRIrlwPUw/Cgb+1yGG5L2jSW7UN+AIo1rtw\nWWYE\r\n=b4rv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKVY91/HDjyk3fZoSzBV5KcSdNqincvetAZ0iYCcNv/gIhAKX0YS41C0ZO2w4eyBa+8tjnzRQbcWXm/lYtdxL5g7Ik"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.8_1573761101266_0.4979688413774812"},"_hasShrinkwrap":false},"0.11.9":{"name":"@react-ssr/core","version":"0.11.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"9a5b9091edc93c0bdac96d243d2054418b1f5210","_id":"@react-ssr/core@0.11.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-A95krpgLKXgUQHjtd1pGbDFFDTeof4ruJZAWikdo2VJbBpEom1dbGq50ZNjTbtr9eMZOqzQnemsYVKcybPE0UQ==","shasum":"87c0dc96913c5feea33c298e4f6b8b48faa2f69d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.9.tgz","fileCount":23,"unpackedSize":44141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzbcWCRA9TVsSAnZWagAAeo0P/RyHbn86CyiKDIUcIp1G\ntYQklWhaQZ/UzLM35L2TWEGpDE/wKSeZrpWFRsm9VElShfIQ1J6bEItBx2di\npnpPZTRHdoQiL2QCGzzgTrrqyfVbg83vGWYk8R/8nququQaAU12U07kO3Je+\nZV8AuYwUFBvuWxjUUtVY558e9mYD4u0I9jrBHdqnL77bCE04B7rQNYpKXDjJ\nfiAds6xEJQbVpSVXDMSxYgPMy0fpTeho1KnCgDBu+8OXtUvFEjcS2Mj/V0uT\npJ4T4JxPR9nZcpeiHQh4Ge/p4kCoLm3o3IhbSYuPzWBjdqymz0a/+wD0vgSM\n9gpOiC8BfQyuvHBgE2nuSEFVPcdG4H9uLsLdkAltkKDzTfXb6DIMWGpy393/\n+R9uR+LlZV8ZaQ658iv/k+8FkSvxOp5DSVUZp0OK4069WEWHgneyYrXeYha8\no/fROFjQg/OhV2zesZdEUKsJI9AZPRmCB+6Mi1E13a8P0vjTdx9wyL4J+Ua3\nJE3tyK/6tgPmV/wUVOidcat5QHqFAWaDMVnD+byPW+atxOi2FrTrVkg5n0E0\n602k6jQ5GVqglF1iEo8O3r7kcDEoijrqRboTuiPGQRlH2lbI/SfkdBoZX64E\nZyMUZ56tOQ22EJplQOqEdAVQiQpfjQM9wkGqrckxCgbKkgARUAQHQhF+ONxW\nbZBa\r\n=brYW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwdkWha3L+WxVihtk/jmtnCLBsDvyIC9l0Bj4xq/bOkQIgEAaXSOL+TXpbwATgzNul0yUhSdsKf9g1H32cnQkIx3Q="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.9_1573762837722_0.5268534078343745"},"_hasShrinkwrap":false},"0.11.10-alpha.0":{"name":"@react-ssr/core","version":"0.11.10-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"aacb390f9144898770a14353060ba5465394b04e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.10-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-XGMpV+QuFtSGhM5/DG6A+n4mEqEsjtUaVKLIby3jbioQUIsqWrk23AA4wsITmN31ziqkavyaN7xVnvj41H6V/w==","shasum":"e7f7f3732404a380652a78feb948787858a3e072","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.10-alpha.0.tgz","fileCount":23,"unpackedSize":44282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzgDlCRA9TVsSAnZWagAAbOwQAJ7cjurylbmaCmHYQbRH\nda2L1/DnsgEcAWoIy3TvoQylQVAdSXeQhPZ9DFI81pjkbUCxdKGPAl/efssr\nfRhaZ2TZni5u+xnqXnALhRDjsMVUxgKSuVunKKlm2v1C7JAiFxPv3NGWYq6G\nKzV/bt2T8SAvEy0+or7Hq1gjbKGsWQ8v2clwnfBnZVKKVw6Y3Te8xQ4+hgFX\nI0b/1tycw3KRaKsbZX/z1ohLQ3ju4pypT3z9dUua1YX7UCO3g7vUryYb6Wxd\no2bKBoTp1XZuRT3Xwvr5/Ub+oVd5ZQ2yXZKau5kmo4Zy6bzK5TWVmf+k09z4\nQMY4lnSmRmdSKBZdUWIrtfvMpr0G76tpSJqFAPy4GxMlw9gYXz1XitvdtH5p\nJXb6x96iP/HPTjeFWvjGKB93G0+kGqbN48vg4ednAevmg/YtyOySXshiQjBN\nHBWjxp9+G5Nl1peCxqriAjhr2aGWHALAJj7Q5FqrTH+EUKhHXvvq059aJQBe\nkwylS1MlCp0+Ydl+hQ7kRJ59YG78QnWYk1CNg1R68JKEGnO2nyWN8x1KD9V+\nIUckLml0C9Xfmv/VmuORm7hrcvl/m5Ie3/hKi75Yz2wKP67rkhRu4O3sETvT\nYPhRl9h/bTd3cJqLJ87isjTEcciu20K06EoBy4W2kgTQBoeDj75umUxsPJEa\nkonG\r\n=TpVN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICo2VHmpWrKrYc/JJbj0HrUIykmVdkqtzBARB6XO+ekyAiEAyl08tGH1Av+F33MkH1WlLjMSTM+Zs+JeteOWGOoiu6A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.10-alpha.0_1573781732588_0.3256623222024162"},"_hasShrinkwrap":false},"0.11.10-alpha.1":{"name":"@react-ssr/core","version":"0.11.10-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"56088bed642abeb79fce722a7a6b3326227f998f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.10-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-OSt17mHr+/8V/lfRuxfwbJ26qemz7JQJOhMrWROiAS5aX4zi3m0a+5UKyYWjMqiBLH7YqxFul4jmX8CImnYvjw==","shasum":"b055d9a4d6137328c8b0a1171eb4f6aa2548b964","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.10-alpha.1.tgz","fileCount":23,"unpackedSize":44422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzgJDCRA9TVsSAnZWagAAjLQQAI950m9/U9Qf2zSlvnmb\n/0GVJMI1qcbbC7qUfKcdrs98b2Sek8fFy67yBvwKyT0VlI4bjNqF8Y6cVhG4\n2vH2/d6Ivpdjr6TtEmlKeJmYa/ggB+1GRSKitF1dVxxl3n9SIlneYMpLaW4s\npsVmmwUe0inBz/sKpbhTrq8DKYj2olDvLqdlKW0Iy8cvgxDlb5slClOR7EEC\nvV3f0pVsK/fe+JxjIgWiCnPBgJwtNwVt0CR5U6NpjtfB2DhQa9jHB3SFxxvH\nhpBGqq0FbNXrV4QG3VNB2PUht2725V52cvkJLSJcF+JWAN+ZyjY1WPeW9Zmx\nv5lfa3EF9KsWY5E4iey6whhhkk3xqovlh6UGHDqsJqYiEKcfSPv8YzDi6Pvj\n2iwzqeDriq38eb5wQjiifc6M17jIlo+gRnnMblfI+Qf8W8M/nVdhRm923jbD\nnYJlAFPkyTgU8q3SyblBMOLFObV5xWoRUFNpoALsH/oPKZpAahVU5ziJAn2v\nIi7vIc1kysAIHWZ34FCM9NfH9PO9ipUA+7/40TiHvQt8bUb944nFK5G+JlSV\nh8IImkFm0NbwBaCcmBKlZ8MZ9QqwDOfIgxVfoZ+tjZLOY35EFva2V+kfu9QQ\ngLh7Du2eP815axKFQXTGwqUwYLDSH6ZAawnokh1wzfuEPzxAN5rkExioPANd\ncxxa\r\n=SkC2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAijGu8/EbUNIX5iR64P2Xs6YXIsQf182gd99SqKYpKAiEAtWAqRS0GfN4xhE/w9Q0iEpHd8YCgPHTM+wa2AUqk4rU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.10-alpha.1_1573782083182_0.67730346589987"},"_hasShrinkwrap":false},"0.11.10":{"name":"@react-ssr/core","version":"0.11.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"e1bae8bab745dfbe7347f2127f8c854a8811857c","_id":"@react-ssr/core@0.11.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-TJlTtcqsxBXG6owe+mBt7Rzkb7LpV2g6NrNHwyZfediy01vuICsC8fCCGHg5Y1hXh2z4yGnUvHbClksy6DvJrw==","shasum":"202da6ce46f029a389c72725677202c0b38627df","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.10.tgz","fileCount":23,"unpackedSize":44406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzgLbCRA9TVsSAnZWagAAUb0QAJI43x/QR6d76yhV6QSW\nLt/XkquTAzMO041n448nLcdQ8Cwcw2XR0drzRUK0R0FnGBr6aUTlJbYkK383\nC4SFVqcMlBudZyXZfhmWnsi6h4pEcc8ftVlocBGZg6/7orzkeyBfx5CVO+HJ\nunQpLTF8IIEbLOCypLRvtQQUPWaFTz5lLmiKV3cdY2rVt6tR+SFq/8N3NKkk\nf0Nnl26DIHXt5etEbADgbx52uUugne5WkY4Y9RGACo1nABjtQA38QnxdGC8c\ne7x1PIqwdU4E7NoZn1L9eNwXDwHkHH7b3qJoSA92+JYZt8QEtLgLIGOcQXyv\nkM7zrNUM9GJe8FQtjOIgFmCYJJU1pLHgzZPkGC3gZNs3fHvsPUoEfdVWyyr3\ncSf1nXvsaMe/qpL6fIdiRKXItKe9gaVUp7tAcb5CE84Km2nX5gPK7QIBPgiM\nYtwwROXntoywBKCaPPzUHy+JSujljOWGhqOVcifS2Sgo9GMjTMRXjl+ATWjZ\nUmx/Hl0Dv7eammCLX+TpMULdBvcz4Rh+sIoB6wJjZu5yU0//0wtEh9CLT4RA\nvnpRpKInBjBFETK/M5r8t5Ca7xo5jKe8jJ9HtoknD61wREhkP/stiJSk6tJO\nqCeghclYW3yaHM91sdLAHw9y65uw/VrkLB/ZxzRTpE68DAZBTwIqrojKBvIg\nH4Kw\r\n=WJ+S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5tJgfsggD07ZPd+czXEGk7hSxeJHV+P4lC/fphvEEEwIgVIqusT/9KWbXdkL6N0iB3W7xw7VDWQT7neR1MEjJr90="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.10_1573782235480_0.751528409898691"},"_hasShrinkwrap":false},"0.11.11-alpha.1":{"name":"@react-ssr/core","version":"0.11.11-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.26.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16.8","react-dom":"^16.8"},"gitHead":"0045699cd5ded447d153ab49affefcb6e851f170","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-lgphX5jwAS/OmTquAMhq8829B43PUa/UgseDdROaX0Smx59OLKvS4i3or9dPnEVYqB7rt4kgCQjMzcKf9fUMRw==","shasum":"9aada4e6223171ba215fd5bfa946472cb5e30771","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.1.tgz","fileCount":25,"unpackedSize":45681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzgprCRA9TVsSAnZWagAAIpMP/jZeDXbo+bR/qhLOKYYd\nehMkElv/wnzkUNfOnNxpz7U9qQ+jTI5eIi+Llj0eidEYSOiToPofBWWU94y3\n31+UufJYzIErr6ipgZnI8sG83MwewEtXvFUaX07O5Scm8YBs4XfhWHZDa1LT\n2sb44TLJIMT6beNp8YNK7faOmrKdfyvH5/IbeUG8z9/wzXLujBbmjT1sO0hv\n33O9XWqMt1g2d256R0T0+aSVb/gryiXSJOB56FXUKMvwlUHmMq2hv/8LqTqh\njfjvA4en3LwyUG0PmZ/d7qjHrg1z8OzdR7zXbehA4gppdzdEEAHgHFt5+KPD\nPvU8MzVDC5iodMTxb8Vu4F605vahHfgG5mPeqRSxQQ7acQ1Su6oqKLSsTcj1\nbJ/LsY5oohzKiklWF/mPIQNxptRgVzeJ/NhiVmjvrf2OGfvo0Rh5kUkwYuTx\nSsbzbSrPpz2FWyrGsILfDpvZ+1/dhn3nYD5Sp1lapn71WUOG5hePJtvWaO+a\nY7VgqcOihxoxRBPEbHHqf0+WI3CaHfBBNk9b+iypxIuhJD9k1GfNsv6bciFo\ncFqkq9eY2PWgxXfqJwk2X6ZySa6nYu7VeMv3M7zpKbsSyMxl9jT6IEKZZC6I\nuisxBUgFl0nwbKVXc21b7PhDpd+hi1j1f/Vqwy1GW0p5iZaJXrbMLGzLmgV2\nCNOs\r\n=gBN9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAs33omCNC1nC6O5zdrv44dzmUeMMBHYyTikB8EQgWCCAiBkQZQW63KxFW3CqnH6wi8mYLKZ0krige6LLh7oIfg68g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.1_1573784170940_0.06358461964516171"},"_hasShrinkwrap":false},"0.11.11-alpha.5":{"name":"@react-ssr/core","version":"0.11.11-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fce044d453294ea0d4ce730fab1aaf3b440d4304","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.5","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-HQX9uROUQSAewdLdeW3Y/L4KbODF3aR6dLPEsDx1w/dvdKZYN4ZX/0St0S7loM2CAg+4kDduKW1/J5/TCebGJA==","shasum":"e44abfc3b52c49e689de880f1a7c11cf55befd7f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.5.tgz","fileCount":25,"unpackedSize":45346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzkeOCRA9TVsSAnZWagAAR3gQAIwmfL5R2w6LdXwetY8L\n57HT5rT3B67+Myxj/CvFllk5s0X74sByU6TvdYMloAWDwLT90S41ZaW19auG\nhy+B/g4P6sxKvaYM4X+uaQpNIX2QwZNtazWqsbMkjS6YyYLPPhk9L3W0qNzk\n5NVNlWYYkinEB8AFL0jd8UZul1A67NEnpdYvKxIibsIWdykOAooo/Oewnh15\n6iVvjZJjagiSZc0FVmavKlq7XbJm6pNikbCkhHvJGVAxrn8W5B6aDRFbNlT/\nJNUmZeP94He4ZbexCEkveQ4Y7jRKLpvD4AKEU8MU/2qKkf0DhY5pyehvB3hM\nC/v/idR5ZhA10h9P7tTAlkqF36vtQKYhxwHd7/3x8zgMiWgBlus8AC8vzLMl\nTzZxEmBBZfvnyyuOsBwwpLsr3qLP/WQb/UE10fLp1n7mrh0boaANdCYOVQt6\nl3nP6rHBC1LJg+/jh2QRyku6FStVT8+57vRhznpIjENyQMtsIieEUNA78X50\n35nnNKdlUhhzsNO8yTaHuayMkdsMf5y7IXWjsK4k6Au5USufyQCqpZj/Gfvk\nSqAS5sM+COFvXhkMSj46s3txKplgdIntS9GdRwzjNRUZGvE5hR9WO1DBqnaP\n63oshLvsMBUfylnE51BW+z+gYLokq27yF0fqHSSjVvH6H7FkbsDsUTLkE2rs\n7/a8\r\n=s1He\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoO5kucw7N2R2MaJRLgJM/lkzn0vS0q69VzcGicZLh1AiAecTVLZ58NbL6XuRmIwdCwikzKlbho49tbdG7H16sBAg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.5_1573799822279_0.07266390981468662"},"_hasShrinkwrap":false},"0.11.11-alpha.6":{"name":"@react-ssr/core","version":"0.11.11-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4d27a7c203f2c5c21897bde3b162b1bb8dbd4b0f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.6","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-3cAYGIhNQe61Cxg7JFnCovOZXrKEP7ePJIGBHFApNM06vS/4Rqb0ih/mMdzyfSd8GCh1pSUoysloGa2ldqsRcQ==","shasum":"29f4702ad2c3815f2f022029b49b6c2061d6648f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.6.tgz","fileCount":25,"unpackedSize":45418,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzkhoCRA9TVsSAnZWagAA2qAQAKDj7njtnZt5NwPlm1yR\nBsvrOtW0i+n8zaoODol9xMwLMlGIuCPGxwKD8+CJos65NMa5VlBjl+BC0dgR\n86nMHLLSO1iH2Zn8W6fjvoirztPrrPkXckWuFCXhCm+rYCiYKKZKkU0Rph9q\nFJ+m6ygLuDsBw93HhAyzZ9ZUb0jCMjd802+T/7iMYlXbiEkCOxp/Z/GCppo4\nEOJl8wfmV+W1dIWGWM/Clw81WXcl1dBWCa9tOtoXD7cUmMnVaI6NEYvuYGzZ\nrWkrmuYlQyP2yXPtN57M8ZNkjsmJGShL/CyA687mLnbIxyKwZHuFQOznlbWe\nZdx/bWwvCtGPAJ9dmfwVRKMqfDw+sxttJQvybF+FuL+ZAsckVnGNeNGR1aeF\nnxivgtqt1U0WAbX6gKU9jnfldXqPDogZF0cwDzVgE6/jx3Ubq12fPbRB2bdx\naakWzWo3FGoerfNI3xF7mAq6herRSVZ5qDBffM8HzWtGsnrzNevD2HrqmFzT\nXX2F8axSZYRTx35AFGYz2JCGHQzeoLHbCIK6IcQrMz6ED5N4LgXgH0SU+TTQ\nhZcrko8/vm6ZDbS4sSstErNOmyV0/xz1v6LrXiWgo8dkoJ3XZ1G7L24Gwl3Q\niLzVXqlcF1hveBWGfNzIKUGRs/jraNRoiid+ygRDwwumz81XHeR+mhcrI2bU\npkr5\r\n=OPnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvLqwnm5agAyBtW9tScRSxcgD4sVqbyR7Zi5qWCVrPygIhANbwUY/4UKQ6eDGlkqklPjXZMY1kPC8JscD/bAQOOvuO"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.6_1573800039660_0.7530761583296224"},"_hasShrinkwrap":false},"0.11.11-alpha.7":{"name":"@react-ssr/core","version":"0.11.11-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c80a5e810a29db5f9420f01fcb900a39c5bfd684","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.7","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-fe2QJNJDIQmPq7i1ayXtF1BG/y04Q4J0PcSZuM9lWBFDvehGaqmElLpUIpqDdtENPrIxY4H7L0G7cjmmiQCLjg==","shasum":"8e56b5f96cfd6c8fa51f69bbce23267bf5357c8c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.7.tgz","fileCount":25,"unpackedSize":45443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzkszCRA9TVsSAnZWagAAIm0P/iHjivDO8tfe+j/YgLVC\nuMLp1SSUSZdGhd0jylh4oy/zh9BRzTEoIsf0xbMEBACTljp7VhtbDLTbOUr4\nSxdpo4RzspnYfTTpZhMGn5dMlJPUg3vXeCv1ig+Gk0v6B4BnP0FLJJCjV/kk\nxfpe9Fbv97D3qhD4oFl44BPsC6NF7uM90cAk/TxNWAQVTIQcEwlSnTCP6lTb\nYJ7d/PNQwoUB8E7EffuMW+gntHAFoWEI/6FN0TUJrV1GDSr3bjiNSjtbioyr\ngtVDDkdyuP6HbWj7oxQUKq13CUoXAhbe54+WjSNOBButqbUDXnz7DenHCtq6\nKAivtDhvQq5rI3IuqDwGAEAPVwzkrB7yJe/Lc5ipWBbaaiX/eOuSBA05JASN\nofg/ybe+w5zGX4qwPRiBLPI0WI9pD3wEz1w/kJ/KYkjV5Lt16HzxSgQ3aq2h\nEmSfNBVZKxxbo5XAavGhH6FUP4Epn6ZoncKLzPbLeiV167FBGkfTAau8JJq6\nwlHIwij+LyT35l2Mp6Lu6My4tNb81B0YlbhQbvrY1e1ef+zvFlFYmyjSM4eS\njeizL5iLlF2/e0S/64qUpQ7j6/JDNqV/1chqa57QOohVoQF2FjTmT31uDrvr\n7RLut4JxlapUJLKTzH9iLaqHpeaxyN5eeEDkHOKXzCq1CMDGiPgq0uQqfkhW\n43y6\r\n=XHYw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHfT6+s62bav4X9A6sjGDIkUOMrKV3sPNIdBK0vOMJrAiEAs2eiwmVHx+TD7QFIKOdmF1zdQUBpKq8Ecz+69QpUnoM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.7_1573800754999_0.3129726595358071"},"_hasShrinkwrap":false},"0.11.11-alpha.8":{"name":"@react-ssr/core","version":"0.11.11-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5f97533634913e8d90647f37123894a62b4c8fd3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.8","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-7D4PeEaFVzuCTHQi3nFy4SEi+QJLGQucIfSLPtWPJEW/18DWuyM33fqLw9BcSZBhIFV5+o4Jorh9y/AdMWfqJA==","shasum":"4eec6cea86cec0c518a7cf7a7e50a76258358d66","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.8.tgz","fileCount":25,"unpackedSize":45477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzkvbCRA9TVsSAnZWagAAaycQAJfkusjlrJvWdRdFdm/C\nH3ErI8lVtZZHvP7eicYJJsrgbXFd4oj5IhSkchAywhNNcNzZBWwJrKqHlX3K\ndwrox7alNCv5Y6sGUce5qttPfsWlEy28Pd8MTKYENrkHu+HJjjNQa5RCV/73\nFqzmOEnovU/bytk+nGPd7MSldRU2jz3MCF6rElBlkcXnpE2eVZn4Bj+vOYWh\natkvBh5jpcfnXRUmB6cQ74iNrA1rdFA24/dyeGUzkDt66cficSgmjITcImEe\n2mwRKnsvyhdAI8oidoBluqEVh6c1XZyTIbCTxVaykJQfcFCx0K6zDzLm1Y/m\ncBQ/VxmRaSYb73xPXi7qmwSxqDH16STLah39hOxv4iAw47C3IhZGYaTjYc0z\n3LR6rG3kd+rl5Liw7zwUqmsDA5wZ1L8U0Rae8H0SNQv6qGesZH3mkA6Fhxk3\nokVeXLAWflAw+DToP5XwsQ5X5qkNbc9jKm/EhCo5X7n5WhvKVQLZfzmwzxBh\n+z8Ofb+R4mMHkJkrVYQPokDYaKR/6gK3OvxMKpo5CkrAsb/t0tSfK0HuHVJk\n2IQDSjr8CEQ5KcdjEIZxo1hqNtX7B+L7YAsjTYdgqIv418+ONGsSy+O4IsbQ\nrTiCFfG8YSDFVMVD6+7ZhDJzV430vM9gVxCTrvZ2WFYOItSs52eUcHWdKHrf\ni9IM\r\n=tyd2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy8DQh8Rc69fyg/vgor1OkCIRNrEj59DVpHf3RamPVaAIgOFLn1Etkljj2KvzFtY/VN2IxuLSJDEFt5q26e+txBc8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.8_1573800922571_0.797518791697071"},"_hasShrinkwrap":false},"0.11.11-alpha.9":{"name":"@react-ssr/core","version":"0.11.11-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"23729991547dd53d290b45a21042a4076325d759","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.9","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-b5+WTr7Vd0BgsjTabmFE2nparuWNHzNYOXwfzYcbhf2JkzyddXmqmazJ0C+1IT0dRrR4DB5b8cT4tKAUUctIXQ==","shasum":"8f3551d4689fcc2931b73ffdfc6b5ed2d3c02fdb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.9.tgz","fileCount":25,"unpackedSize":45507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzkwuCRA9TVsSAnZWagAA+SoP/1jlHkZKwx0SefSWhbF+\nFDtVSFPqYeZ7zqXP73vLdt1AaRWmTP5TOL4eFAZfYwmMKeoFOiGzIIIOwZ92\nztzd8LtpNtNCO1PJXsfANRTT+/PtWrYJjWxAnlw0hhtTl5LXlaJEe7RN013S\ndZcjYoyOhvq9jdUoZpzOoA5dgd9DG2g4BBwgITmWYYNdX4dThM/8VpY5Ds1n\nytoS11R4YpJzQ+V/c+IIqpz4asW9CXFMZtc18UpT6RV4rXWsHrbwFrM86BZi\nDOmGvsOCWI/cpo/S9Wj/cNYL9aAzAmpd7JaWuSV+ezbRAbcQcvrp6QmwNZfJ\nwZyAEUVa4s+nU1QRKiWOq/Jxi0XHKbOWWz3xR/JGPx586rxykVFcbwI5PM2A\nIfRk5zEhmJnWAaRZ5CWmd8DbgzWvz46WymG5a0Skrost3uQ4+9TCTD1Ob/4T\nXjVNAmlgAs6dM5jtxZqN9g17DNtbMEIZEnrs/N0qkboy6z8Eh+AxxFkhbSSQ\n5SYYFVdS7Ip6LnXDYaODSfg1VN33DRXCFcUZKpaBdRskbFUqSzR0tCvkh225\ncWeIgox3DnOcI3ER9tuCmTMfT72jq2j8O/lQRidX/pukPcupLCzGEJbmTnm8\neujAHgpnKbhfqov9fwXaDCebDpoIx8NnNNRDDoUwdshINkoFh4ZFKGFQm+jd\n1LaS\r\n=Isih\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALWA5GEe3Ij5VDUud30s+1gITS95EXehQEpZyAw76rtAiEAxptlQ1pA41fHeUjVt3H/3Yx0aEy5AqxCzsVUPGkjaMw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.9_1573801006433_0.4010724379130488"},"_hasShrinkwrap":false},"0.11.11-alpha.10":{"name":"@react-ssr/core","version":"0.11.11-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7e1fe19e0f8d64b52ddcfd33c8dc87d54d7dde0c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.10","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-p16XuaIkWBGfjf9nsTRTEFguSwLYeEIK/hOUeiOlko1Tc18AqMdvATrrK4OAGorpxicgENvf2we7bKVfgGSkZA==","shasum":"547c2dcc3bafbb32a76412741aad0ea12a644ab3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.10.tgz","fileCount":25,"unpackedSize":45384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzk1hCRA9TVsSAnZWagAA7mEP+wbx8l6cnmSXhP5OJsvH\nQLHXkmmu0boz1P9oahcTkAorTt8CI1/hMP3BYMuS8oX3XRToxBjiRwmLTIYK\nAyi6bUcT7YjpMEDkt4DV7++djoMyTc780J84SRTlc7eIO9s9W+DxE5Vi43Yy\n4+vqzLfgKGrvVQO56Qvt7mxlGaL+gWMz0dvVGKREvuoe9LyrDFxFmpzgk3Qi\nERrrZvqdDkbcG+BmMowjb+oDI/z5PgAnOvckqkjr8ct0q7fiMvImSwPJnjcc\ntTdDkpl30PKk9KyVppCW/kJBIsw8rxa+hCBcbN4UR68nrGm6VT9QXBCi6aA3\np/U7sF0W5EImUhrKGTmoA5IavT5jm5MuN86cEMF44TJIPqRAqlOQOEaCS2Dc\naLQoiZG7uTM/mYrBaplNcyTz9VFUBxdQy3QVkxS/HUTU06ytAYn3bGCNTHQK\nM8SopAhh7iycX+G1obtgpzaictKbV1kFGYnG7Ul88W+CKfWDjaRvGYaX9mg3\nHOq29w5ettzICz7WRBsyk9aR/4j0zg4s8aH0o7bddbda2hGWkM3C8003b7qb\nUYqknchkuP0bssDJPZXWfftjMhft1i4fbxRIe6gcfFlm/Wke3aMqhNxzWKsw\nqFCdtacdaCz2e2+9/xD67sTotUJm8qU/dMvBDJoDi6MQGgx7sDu6LmOhydXN\n/D/v\r\n=hDiS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSJD4SuIJrCRHxr0QYcloVRpHnzHqTi2Ao8e7FjGrnfgIhAJg9VSl6IDdvEewnZFz5+hStoAWxpmcnLoSe3aKSgP3D"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.10_1573801313347_0.88609157701805"},"_hasShrinkwrap":false},"0.11.11-alpha.11":{"name":"@react-ssr/core","version":"0.11.11-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2b12305441975e24ff767519d7fd0c9cfccccf6e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-Ouh8qxJ1KuqA6sroubMNzQGWgXutAwMdIBDSk162BWRI+cY1AVVMFfIYmzeI4eE53D12cyo2kWWmWrZA+s7QwQ==","shasum":"7420e23aafdb4288e55c495faa00909d65b89d98","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.11.tgz","fileCount":25,"unpackedSize":45404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzk4pCRA9TVsSAnZWagAAEbIP/iYiTEK7RUaRCjekH85+\nEmtPBZmeZxcnA9Qn1lSxhchdH+inE53JnuvN9KiGy9QONy/mSnkmY0m0YR6E\nzNcy/+l/GKj2Qx+rhNHUkld9GHee6kXjymDXHXH4kgazgHfMRzAGF0Z6H3Cd\nF7VqGvwOhdvdoqpWG5JJJGxIVl6FLij/Z0pOT+K2R38g6SdWK1VDs8SWmKMM\nVrFj+ixGwoJ6MXm0i+zQYu6iHpvNF40tX2Vwc9VyTbgGKDxWWXyaPZW+wLXR\nvrsrUt7OlnAEdTfekvwkUn9AM0nTuik9l/wRUJ+T+1RwmiLxNh67VRL6lZUs\nQfa7VbY9CEtWG0t+6q5PY8H90qKZySxSY6ZZFjUz9TO6MslJdZOzIzTwyCWz\n4TKqjpxD9zA1P47lqF7/PnHPpsjulpGL95wsOwyStJb6tw935s3r7kq4TlJz\nz1c5e4L48c3UU7ypjcmS6eDvRHbpnf646dcJZ+F9OIJsSymT8REN94H0WMJO\nKkuV9uWXaUBiobkdUDryT1tEdGtbK+v4QI6Sz3ockNoe2Z267Db6PPhnIopT\n+17CbDtGMJ9P3goBazhR070srQMwUzZqb83NEsKtqDvDIdhNiNZ7oZ3xmv8g\nd6wiiD+p6G3RxnbJVgBjBDydIvkcPqklpelq/CW83HztaJdNa+qRn2EB+cx7\nFJ7b\r\n=WjSE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDxaL407GRx5cwoOrENfab+WfZpCA6lRj231ZmJY9i8cAiEAnSVcYUbPfxZwqWUhSpK6m5au3v949SW1wosM7uK77Ew="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.11_1573801512671_0.05685240986552231"},"_hasShrinkwrap":false},"0.11.11-alpha.12":{"name":"@react-ssr/core","version":"0.11.11-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f6f9d73ef1fa8dcad32106690bfb91856fbc2084","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.12","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-5WLYXU4Bq2o6WH9zYl78j1pIqzQix9h1AXa7FRRWHqN3YuzExBDtEUqdWdB6eqdMhibeR397b12GqGs1ZflCZw==","shasum":"ba1fa1317e52b37ccb21fd6d43180c6470ebeecf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.12.tgz","fileCount":25,"unpackedSize":45223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzk6JCRA9TVsSAnZWagAAlL0P/izMHZEaYPyPas2kv6uD\nDeYu43cck+5Q51kdtSxzlOSeW4MallSdzJud7iqEeQKyWcmpSTmBHEQkY5P1\n2b9P7GmpXJ2kI92n/v5jdygkBxDOeaIapMCe0p6YaYalMunXq6yXATTpJHgi\nCJkJ1w0ADZnBFtcuxxnaNDaYPP/1tuDL4SeTcIGSywU5ejjPl9MtETE/XRRk\n6HTlZzYQT9WMLJH33Tm/pgKQvG83jBTIOut10sSIwSqqhjXld9MaTbHWAcTY\n9wTHyC3+pKudoYTolIg5241oyYiVWIyq9sATWlgMM972JDwYWPdFaY6XzdFg\nRXF+Is+6cUswoYKXZEzhTG60Dc9zNtiv7ni+58O3biyDdgUkSDwTVbZCSxQT\n8V8/vmTQt8PxeP+o9rY355lG+W58JDmoYlA78MFmLYtcvaHUC+OnN+gwqtVY\n4FlsDalEWMqBqKFeQfmV0JXqx6JXVOdgirEz31B2Qm4XHxqP1TPbjML0qlb2\ntn8edRic7UJgv1JRwMq9TAh5SpItqa/MIfuiXCf9vCHk7BzL6QPSYt7N+AaF\nmw97zYOXT2cXw7tEODWaad8VAAey3FoxY0YWbxIO/JkAnarIpBcwHmko4YKg\n9roL/+x6SqmeL5S4rf7t+Q9PV8CanYeqCAPbvVY4tasRnTYibLT36Q/6GvPc\nI096\r\n=XmZK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmKItd5DAj8hMVBZVWjh11Q3YOq1KPOnrlJxMXlEEkLwIhAJVrqDblYu1PY0mG3AU3j/Rm4GEF2NfxVUxrCZsfHcWg"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.12_1573801608967_0.38404450499670517"},"_hasShrinkwrap":false},"0.11.11-alpha.13":{"name":"@react-ssr/core","version":"0.11.11-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f0c3e709ec447bc63ca213047a4b23e2fb188af2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.11-alpha.13","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-n3Je5gAAAdP4Gs1teZ1qYfUh/3XaDZyR7+skMByq9MEou0L+hebXmRIlAGAT3Qp263FGJ8VrQ206DhGpoPritA==","shasum":"9c88202dd831469b6e581293ed7764b160b5e831","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11-alpha.13.tgz","fileCount":25,"unpackedSize":45170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlA5CRA9TVsSAnZWagAAtdQQAIT1PhO5U4MDTj+SYc+l\n2FRdtPmMXxmp/W+MYGIP/zmb63cpu89LmBNQfS9/PXEGyrCcLs/rx2v+x0TT\nZb3ZwCiVKly8HQlfmmDaUEMWQhdh5JF5smopnYVXeFBpb7zYTUpVP4tfD3kc\nN/oqvzxfyaPsjebtWqG2yks3sGkf2ysI59EpAPFBOQhIQXBk1G1QL7qP4x2A\n1TliCbnMi00qBQS1Dkc1wAzxZ/8UekRNEqedqcOr6gyP+YkgITzWUQiYPU3N\nDk3L+QsO9gpOZWG27FPTNUFTCcMJedfVWPj9GWnnq5upnGF45imchsd3+PMv\nk0ebtAuJWXrEu2o9rcbhQCv6XlzAHmBmVIyiNGQHDYF/8ux9b4prQ2AaxC8q\n/COH+zFG+E0ens4ZlsuKqly15KiM/76x8F14k5cfaiDVwyw+lJ4c1dFjj/Bf\nwxP8wmwFZinkfjChtsxariuCvDg7y2bs/B37ndcf0FEiM72X8ZJMKDEMJAMm\nljnPdwa2T/BcunKkbOxQSLcWaBTqi4W1cUn5nA+OzxFppdlg0+ow69DldD//\nBHq0GoPB/b9C1+svPOI/Un4VI3RokQr7s6F/nvnXppHfjNwBG4seLQgN31UQ\nA9rxnKam25hClk8P3pOKFIKxPSq8bK5a7I4aabTGLB/6ir6+Nq1j5L4njULT\nXcsO\r\n=lFhw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQegjR6ApqNcXEPqPAt6bf3iJa72pd1qoMf31MFs9uxAiEAngnNMHZjgLECVWyf5qB+9fbnnG4OztUfrpjyHlicF3g="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11-alpha.13_1573802040705_0.525140103797499"},"_hasShrinkwrap":false},"0.11.11":{"name":"@react-ssr/core","version":"0.11.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"80cff19ca378fc92140846ca75b0cd32a041d12b","_id":"@react-ssr/core@0.11.11","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-gzfnkqwRSCVj566d0++2NyNeRGN6RdE1cPXyHsxuOxqI3aNi/oJsasGHJgyf4lPD2DOICpxt6GoniqBtsCFipg==","shasum":"11aef923b0a8c972279dc04c7f874dd284ed11e2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.11.tgz","fileCount":25,"unpackedSize":45661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlEDCRA9TVsSAnZWagAAmMAP/RRt/EMD1WGaG/JFMdg+\nwen9SyAIGEDpUrEfd4UkiF990tUw91S/ByfIDgsiRmpq3lBQpg8QU2sRNg8Y\nqkSB4HnwmK3qkqrrZx0+9qrQEnrc+lPK7gDFZOYODvVkGMbUJhUZBB5iRneD\n7uz3Z0jn1c+SxeIKvbvKF5EDsEA7xuRI8KQXhULd9S/KFqygo3SdDpla/M4Y\n2FWlOTj2m6Z1Nv92VAjlxGLJk56gTTfi8fpLS5s16fggbCenPfcfahy6aWBx\ns3djzoyHLtiycCprX3EQJBlCoJF95AEBaJQa+Q3VnVYgr3c3KRSD8D7ughtv\novOAXmx+Scf5ivEGXKpVN/eSTHj1vXGPaMIEAO0Kdh7TovQlEN5VjOTizccr\nXBncp2GHwxexiuVBlFI5wYOUfPkIuwIlkcZvQPW3Bds30FTMHwk259E/NSDg\nl24LS+E3QjEnaY+l024p1MyQV16PcUXjLfAzneHZ9jEZsVBRW1cAmyMHgFr9\nfT/yYRGCwb5H/lHwPAbCw9yFASEhxBHj5XAMJn8lhvFS276+h8U48jg9eKqQ\nduYzC1Qp6tOmHCHGioWTB9zD1+FZqe5V7V0VuQPcHkonpRJR95ZcMKu/9YJF\ndnBXcpSM+GEfz4/i5vHktMJNxYjlP0fujHNBs9RUYPCaM7MhUmQJoM3unuuN\nVdKg\r\n=6sd3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNyoKhM0F4v/tAd7rHUMVwwGoYuoazyno8MIRxnbebpAiEA/CPTFX7OTmP4g8H7zngcCr44Ds8S32vjCKSSx61OVBY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.11_1573802242764_0.027167023353054764"},"_hasShrinkwrap":false},"0.11.12-alpha.0":{"name":"@react-ssr/core","version":"0.11.12-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"edc7f4caa4a2affa9c2415882f37129179322a8f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.12-alpha.0","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-RuHA7fixd9n3Dj83rIXDd5tkXkFwA3HZKEec00zFW1CzrBLf79iuzscav2/523IblKN895ACcbEpHl6S3ZMVig==","shasum":"c750ebc0fbbe70bd4c6e3b6b9bd9d1f3a68ed2d2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12-alpha.0.tgz","fileCount":25,"unpackedSize":45644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlJTCRA9TVsSAnZWagAAp/oP/jXsYjgtqQ+3vV4DUVp6\nhfwOV9CXHYu4K8edD6OOZ2XvB6fWwG2WV1fv0FyfgMp1q9a0PCk8HvuqA9k9\n5XIt9JDcBQB7kYJmaiQtsupSRjA6Jam+gJHo4ttU7/18jw9YzkdzbqRWY0y1\nenejutedOgVDGaffaukSHv29/3nvFn+PnikHIfS07ahsebNAWIkV7V+gPx5o\nbhRWaOndJXjiroR2XQETP/uheotPx5z0sVD/bNgMsscxpCsaUReWLem0ePZl\n45xYW1ckDjmlRXVftqONrOWyclELbHjKWasrHGlVy0SC8AUEMQQ95xbvm3dR\nYzz5lLDTeLaux6DqPLgbUVDE4zZF895hI2vMl3efpMtKIabY8AC5QigTWeZO\nIuAkTJ+FvYLudjSoDiX7QTFIg9bDLvZ9HABF7dNq08B6NXHSH0FgaahcicE+\nu7xVJmIsRDvItWCd0ObnVYFenRl5xr+ynALlDLG75ifZ68J61D5pevq8CdvS\nv47ddQiC4n4LXPuYMe1I0WwChlimGi2v/+IvKUSrZdMx76n3keaLit6MGYt2\nzSOBN/Wl09SlCd7Zlf+zLH/qpr1P+izrceaVFCvtdHmfcZ+0p63/ogreGGwI\n1y4t6XEw+wp0AQonlLORHpVST4w0D3Sgh+qJb9wy+8GJpfKcvectZI7MOSjk\nCa/t\r\n=jtkA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZEHaNsrKcr3bmvglHSW9pBm2ABPXmatEudnKBpCqyQAiAOHoLOQzOAJrXxzysYUUlXy/HhMJ2fdAASQJJBEZcmFQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12-alpha.0_1573802578935_0.6186408340341476"},"_hasShrinkwrap":false},"0.11.12-alpha.1":{"name":"@react-ssr/core","version":"0.11.12-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","atob":"^2.1.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","btoa":"^1.2.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"44901e9c26a0f7c0b94cb5b6abc8d11373d1ed67","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.12-alpha.1","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-u4JSpHhScc5dsqm0ev+vgk71AnFRMH/JH3PeUkBpz57kt7HaeMkIiawGEscQ3g8I/vxNtVvfr8WGb4Q49By6jw==","shasum":"b50dbefe31e85437fa921bfdbd7602cbe12ce008","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12-alpha.1.tgz","fileCount":25,"unpackedSize":45730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlNwCRA9TVsSAnZWagAAi7AP/iVqdaF5SEEwqPFWNlB0\nllkS9eVZ8eDlLAD61ZEp/NhMTWTbMgYmbxaFDkjEG5TqPoAbEJgD3v4k/qdo\nvfM/D9QtF+Teu6bxw6a4/z+JvRjZ8iCcklQcF3Fg6itrIJPyo5UVBKXFO1h7\niCLJGPgsVn2FAp1ig+6Uv5pjZ15P8mJrI4g67TbDF4ADOGYtFy3uSUafRsOC\n68BUpjGmWwTPr9ND03xtesrYeSKkamS81FPbs5HpfpkBq0OJ5BalWpr+XEtG\nSe/U/h/tXWodMJikS1EG/Jc7lcSgZ904BzAVCFahSFKiRewfneaxIosg6tL9\nVDZMOWwE+bosoUqK80iFVirdaDwXBfML8ICBzdWBMzwUhLYnTQlC0qwCXVI3\nqFhrSd9lMTknaaE8EViySPnlAscTm8GRbRPcDZpB/VNiBwS7EHIi/dYDCqGj\nMi4jDK/5yKPQPUIC1KS05oR3/59+qmtX+IxdWIcRr5wOdtnCaWO3w6h5Q8N2\nTjE1ZsCLY7bBxSVWJRxPQd095p5F42L4wrVkL5CrhOStL6TSU0HhAXLUOKqz\nKXdI0zJQpU9DmWgYD4XviDuCsl6H1sPWLOUXQzSMQjST7FiKSKbjXrI9Sq96\nt/EZA6fl6DZ+wGHE0CQUooMYFiyBut9iMHOb00c1041n0ClrX3ONODgLclDb\nSjQ4\r\n=XUHM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC58Vz0bYDsmURh8sQ2vgmuEBMvluJYCi1uhG6U7EPrwIhAJoPcIMn23AXGwh9l1NtluboZu4VD/LQLn+Ku3g/sVIL"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12-alpha.1_1573802863798_0.8655471789198628"},"_hasShrinkwrap":false},"0.11.12-alpha.2":{"name":"@react-ssr/core","version":"0.11.12-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","atob":"^2.1.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","btoa":"^1.2.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cae58b0196fb8ea9c5b62e70c00b6e19696f38c1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.12-alpha.2","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-PbykXWSoJWdfLzgwE6rFOS9VNYijZJ7dn7mMsVFWJRr1EaiH5IzBb1VhpB7wD7MvceC/o6tkqltIHvwPVge8MQ==","shasum":"36b4c494f00c7798c07eec9212e2bd274dc17283","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12-alpha.2.tgz","fileCount":25,"unpackedSize":45889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlbwCRA9TVsSAnZWagAAUhoQAIg9n9qt51t/mGjmQfRM\nxXdgG98zJ0nZhrr+SBM4sT0DYyBhQVgWwqIF1+S7AzHTxSntIy6cwrEV0zbI\n7pGhsazPrzA0RYFf14jlE4j4wGC0XFkA0NyhR6XjVSfPE5OUVyMd2Y2teGsn\nUhyugKSFmWEvCHAtZFGlaHUbd1Rl9MGmdFipwO8cX6fT1cOssoDyUbkSJREJ\nafJSO8pdtWyWb0zOoNhuxrPUD+iJeLqmgLLIAh1orSVBpqTXXhalCgrei+Qv\nA1FaxaXEIammslnQVSZLL9KiMvYarRg2Q3093V47tdOHjaUHwzRjU07Zf9DF\njVbtqQdOVnrmykWHD5ooEvPQs8Oupd4KkGHT3d1o/HvKhI2yVIGe2hKJQ9/A\noJiCI9eMRniExPjUsh/TclXdgR9D/WXxg5uWl67RNsZf91PDkqRzxVHYEdA8\ndxqYPbZqdb/x1E4wqGk7W9cYkmUpHH07WgIukm2BcameXoxYIQg4v93GscCJ\njGjPcD6SrLpzBb2IirvPEJPnENpO6ftOSJ3N1+VAEpECDgqN/VxE5tP2uFNz\nO4jG8vxSUy3wjuDi28WiApUvaBr7Cd0EsFLzBAJ5rCPZwAKOkccq/Jbac/V8\nGiAt97jcsLb2VRvG2EcnbDHmqb7B25VN+qG8hBh9MSXW/oz0Jw2M5MwBxBeT\n1NaI\r\n=kas2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0Uq8hq/pTCDP2W3JZPdjrJG/o/SFv+NM/GfBPm57uqAiAyXpKIsKBkL8FA6uKNa5FJaoU4DHRu3B1XjodZwLIazA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12-alpha.2_1573803760532_0.6583544845135658"},"_hasShrinkwrap":false},"0.11.12-alpha.3":{"name":"@react-ssr/core","version":"0.11.12-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","atob":"^2.1.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","btoa":"^1.2.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"af41594bef09963c8b9b73c2828fe64d5d180a93","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.12-alpha.3","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-BF4p39KKVZk/AW88WKmnoQiVxtm42hmLMKnc7YWmztsw02kB1uLijDe1e91xEJ1zbAhT+jFUbtUWIqqMVbLq6w==","shasum":"4171c843cd6253c57da08357eef32067d41c3e72","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12-alpha.3.tgz","fileCount":25,"unpackedSize":46218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzljRCRA9TVsSAnZWagAAobsQAJNSlnJjfn9Nz2AnPaDE\nWqJlZL19tHZ4ubTqxGh3duZDFVLfGEZrVirmr7LKj20K36hHvPt2kgFNfJQq\nTngNJ0rStgM/rOkV1/psXfH9/cLhA3grvT8y3PaIgU017YixW8TElDaMeL/w\nT7BIkaAlvDDd4fRUV3qYgaxhm2xvoD7M9dTl95g8kQUpyBdXL4DF3R86B/xS\nLTdPYVUxoB0SKFevgaMnyuPf/EsLWEIR/7sIm9DpZLELtIOXV+crIeHqx2Cz\nJMzwiKBdxrmEr0jAyyD1IyL57KqQooCx+HENTIvrvdowu/9Tk/5Sfa1n5zd2\nNGd0b4JNlOWtxMyDQsjvp5xzMHdnXSQzszrhdEAxyMPftBd0duoS05w/RilI\nst1VYbQWDOjvZrIvyaEbLw2Fh9DSY1Qlt7M7JNpZRYNjpP+O7Fmisvqo5i4k\nJUSVHLDGGkHJ0Lv4RYIsmDw0XScT3n4TXBlasvZv7OfG+8ZcZS5t/5KsfQUz\nC1HWYITQfwOKVG4Ntrb1YhBe9us4NB8Ba8N5PAxsMnC71gdP3BTqX1VGD+7u\nrh4nsRCEptoHstAjPl0ll4/U7kTUnml7ERYCypuZrDeVbnqCQfFsMWydxD9u\nfue/w0zHXMAJqM+7OjWUVBSg547D68NWgQRrj12MAF3DGAm2IgcWIa7Ulr61\nN2OZ\r\n=NOOf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBBBWZqDsS6KBjvRyhtY+NYCd5Dzg2SFaZBSik3GGulAiA9JEsa3cIuyfP7zIFgiIt91ReHS3np0x7Ew1i4ZfSDvQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12-alpha.3_1573804240799_0.49835711547648076"},"_hasShrinkwrap":false},"0.11.12-alpha.4":{"name":"@react-ssr/core","version":"0.11.12-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","atob":"^2.1.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","btoa":"^1.2.1","cheerio":"^1.0.0-rc.3","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/node":"^12.12.7","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"15a268b1ad6dee9ad8b62207946b75b975306ddb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.12-alpha.4","_nodeVersion":"12.12.0","_npmVersion":"lerna/3.18.4/node@v12.12.0+x64 (darwin)","dist":{"integrity":"sha512-SZXG7TVdvLlnnSWe4cg3B5b29fyRcKt0phhFqe6kX/lnfcMjfl5wzDe4pC37Ap/drPNThx9VW1ytzj0/tAIUQA==","shasum":"63bf19dc9e7586ab089dc9fb82edf45e6546b78d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12-alpha.4.tgz","fileCount":25,"unpackedSize":46541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzlu3CRA9TVsSAnZWagAA5DAQAJl5O0TIb6SEjge21cca\nrudrfOV9iZ1g+XHmue0uxtMUzpslAs+ZV6iVo9bWl7dFneJ0XXtREYLj8jY0\n4e8c4KxtHgZNRzqnyhG9zzcyd9TH66uRUbG3WB5DjPSxm2A55jk/MIcQg3Rf\nVIgLdPU23TRzhlHPz8ee4CawqMd0j8plCee6tyMNr6HoMhztinUs67kr2onf\n0ZuZD1r4vyDk3Ez0ySBOXPDhHje+MVBXf9IdukLFeEb+oVRuWwXfHkuun68h\nOog74ibMBE2zjtP+teFo7LQNi8O5iupX1OYkSg74g8ZMZqrNglQL0T8u2j6M\nYSnrNSf4/vjvhtJiyB1G88k4N1LHNpZ7Sv/ii3a/6ZpXU8DWfBTWId9Y6cps\ncUShj5XuFgCltyDyqrk4ACF/hp0uOwhTr3djb/8qbdqg3q0lq0YWlPBTlgup\nniquS3MN/G/nm5deRa/i3H+vrSX/psxwd1SUihRdIE0tdbfEMA9H66mcHVCI\nueZ1H9F2zN/tthIK/KFJg7tQCzOBrmWq/i/vfSbyj9JuBHcUuBEyTCgRWL+S\npXRZSNpbIj0tqymzPcuJcMgX5jon0lqdOHPviSLjgzw0Denh2EwLknene2PO\nrGXlJnKGEm9pc1p3VNhWKAsOnXQPwjz/LCP97gGItQsQ4/ryrC1l6TpYUOrd\n44+c\r\n=urgJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNtclWOoubDLvcrISJfipq+SukwbajGcTHE0gm8yZXPAiAxgm4mavXXoV1d+XEri+uWWZS2bxJb1KGmxjqGVlXF1w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12-alpha.4_1573804983259_0.5036797733626621"},"_hasShrinkwrap":false},"0.11.12":{"name":"@react-ssr/core","version":"0.11.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","autoprefixer":"^9.7.1","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","postcss-js":"^2.0.3","postcss-loader":"^3.0.0","recursive-readdir":"^2.2.2","style-loader":"^1.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9b844e88aa59cffd8267c9469bd74bda6275e816","_id":"@react-ssr/core@0.11.12","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-X/gOXh8CQ6g3GVuQMKojmuI0B1vciuHozjSZc4jWBLvjk+O2+NXHv6JLYeJsCoilfnYNxBNPs01cFEZlFM2i0A==","shasum":"0441d03cc90641f30ec7940c7f17df7cd0eaaa4d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.12.tgz","fileCount":25,"unpackedSize":48129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0v4RCRA9TVsSAnZWagAAFIUP/0h5mvcDrJhawCqTm9/R\nF/eUXseQnigpXqlYGFClxcLCree5gUETMI9rohyDJxdHWEA4v6ioFlDFgj6q\no4MdV0fe/bvI/KT1A5H/gBZLoybj1TsqzPVFq/Yy1Im+ofF7HP9O2IaKJTwM\nsQCAPNKJX5dG2XJy30qIul409C7WlkbzD2wUJYDK48kTLkM0r1cr3loHVllg\nnYZQmMgxQg24t6c2rfn9WMytbLzSJDLQDpl/7q8SuE3Jd2LSrBMD3rNnnp9Z\ndC6yPxwLz6otTRa4WL6y+H/E3QQ9y2tv0D2YIORJ/XZqxc2GBYeCxvZUZGom\nMdTcsKIaPuQ1fS7VQcEnQWIHn0FSxBT0XB6nhcIIOp1QKWgi60Zkwh6fE//M\n7SYLPzLu9UxnUnxfKFCFRv+hKeUsTHPP/ZXjabH0Cr/L3GudIk28YWba3JE3\nkdZUd5RP2/EuD13SMPw7zNaCUvaTVRtOeMaKSCNfd+Xkl7hqdPxlJ2t45mq5\ndrvaFGG5zolaV605dHdW+2FGVGOONYWO/B6MkRO0B+2ticr+x3bclFMcyJff\nw9hsOm6+Sp7n4uwHE3DMHWnDqDJRM1E9DeGa+MOdRGhy+Nn7rV+1sMJBW/HC\nLClnx8/mPX45gzcoAPptx2/PPPxqCwIhydKaYuAaS+NW5OWEh403ER8PIvef\nS7DI\r\n=HJ8x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwmFZIK95y3ChvuJvzsclg3AVKKyn3e4JVeJ3rER5D1QIgNz0rdbruFx8uU7KBUjB2+WhFE2+CBWfyHiOgSOPkcF0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.12_1574108689382_0.5657372136858694"},"_hasShrinkwrap":false},"0.11.13":{"name":"@react-ssr/core","version":"0.11.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","autoprefixer":"^9.7.1","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","postcss-js":"^2.0.3","postcss-loader":"^3.0.0","recursive-readdir":"^2.2.2","style-loader":"^1.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d90f24207da1f118953aeb3062bd8529b745a1f6","_id":"@react-ssr/core@0.11.13","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-hquA+sWKJd9IhUMDuXQbd2ani9k8JmYY+q7kGjzBOiAtg1hyv8LF95nN0eDRtVIYDf73vJ8ghwJFatbQSTTNEQ==","shasum":"216510f4cdb503d13f88b652384e94950437d3f1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.13.tgz","fileCount":25,"unpackedSize":48128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0v7XCRA9TVsSAnZWagAAUHgP/1M3lAXJ+HJfhnvvBZWI\n6xxrYT3E1RPAZVbZ2bEmnzMemcfSc4ORtfflE8RE2/oJ+WyiKeVDZYV17ZYt\ndu5qZehL4zd5p1skZM8UguhMwvGZtmwC6cmeeOfd3l1wfoYC2jz11XmMQhN5\nrMSKDxtam83Udo93EU1KckJldodvjkH00iPGevQ47jZGL8Z6beuJ16WfDLv5\nByX4M34NUSwKkYiI+ADvUhvsuzPPA+xS+fysVF+2GWISHylT5Myr22ruYLjN\nrqgEAmQowY81+lC+hf3OLrqgX6gELUos8kHAZJzBPzkSg3yprvDCYKw3SiyM\nH6Lylf45hlGrEegsN1KADG2bYZRdvOcNSh5qRBgmNTHwvH69/+s2qoRV6nec\n6FvE4miixOl/KJABzfdOLxIcW3Mc8nGkJ/GTwXPpSpNY8Xgi/FbPjfVMcj6o\nmJRnyCyJwxe/5cIpYmSUCTaM/3sAkk/TrMvHBk8/KqLXiiAujIYYpKPbqNhf\nfWaSjLHlJzCRiyTjgBpFsy+JU0CbIODUI8J5pReZoVVB3NyWYan8rqXwwc84\nXFkzgf019dkHGt6rTJqqG8ZAIEX9W1rgP9E+ZygjzxmBHhrSohiuT0nTnURn\nLv0iJi2PeXBTLTC3BE2Q6r6aHa6i5BP21Snt78XtF156GMCnfrb4YCabYaon\nlKl/\r\n=vwzE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEnDIsxG5wcqrLClErqBDVQe1wJ0H8XIYH2fZYgc6ObWAiAsHQjC60FE05SK98V8a/qM7ns6x9JylpUa/MwhXzrpkg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.13_1574108886734_0.9443055874605304"},"_hasShrinkwrap":false},"0.11.14":{"name":"@react-ssr/core","version":"0.11.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f560e44070b99c0ec8ce828d3979c034d389c1e3","_id":"@react-ssr/core@0.11.14","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-CkfIhjJJWtRdGfARJ6QVzY6CbW0CJdw3rZESX9ugLnYzH9zZnUA0AFt7Sy1+psMYqt4uAbNwlA+wYeWEfFQTUg==","shasum":"8bac412f417b9cb101a52829db18c77c925e9368","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.14.tgz","fileCount":25,"unpackedSize":47892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wDnCRA9TVsSAnZWagAA49AP/1P5Chk6OYJC4yFDmk6R\nW/7U1JUeC+d4w7piBV5wlKJ6bgLYGhVucu48oo5mUP6FcsTXaHV5mIbqev6V\nNd3oP76EnB7woNGAiJUKmXYUaqU6XoMTRDROS9IHjt2gmvgYJ32aPZilwguV\nxWwYWyUWpZlHUGv06PdqS4JWFNRicWMa0eh4WCWwX0yesdaTW4BmPDzGYCDU\nWqd7foVga6eBobWnlOOA/vSJwNj1MHHzUrXLFoRHFhaY1RHHOaH0X2ILAjdj\nsSocdkr0gqQQSXs1P4fiphc+HpJKT3JqIxSJBndRlo/4NvyIBc4PDWOUdsnL\nWlmrg14YEL8KeS5CNKG1HQhxw1zFky0m455raEo7jGs3ejUExcnUDC4Fa6/H\n8RHvNYM9hfq7jHyjNs/ZTczZy6ZKmqZIKRrVAYOOLogqU5YtqoCoCZngbdLx\n0LtWGU3WCpAglHAuecIGkNLOAvBqjdT0lUDc74GeHAynlR8msKJ10vncUK4T\nkspDBKH6yy81amjncv2k/JBU8lLHeg8IvmAcc0q5MG3uhxqhUDX7mGC17Mrx\nVk7PNJ8B+KxBS5SgBGj5a+lGatXygYARmPchVzK4LL3Fi4bO+Yz6FxQsrKBe\nVM8wDY02wW3C9DUCh403ETcULO/MNLi8EPvdBq8goc6wMDFwICWNJuT3jBVi\nLGpp\r\n=yq+c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZ14uk3cVvYeGpvp/4fPzYkIQmxQIGABg6C7irmnCjbAiA/6v5Cjm/zMWtrhXQV8u50YZiGo5BpdMlT2FHAr2njwg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.14_1574109414831_0.6654063527530776"},"_hasShrinkwrap":false},"0.11.15-alpha.0":{"name":"@react-ssr/core","version":"0.11.15-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9ea0440c9c7505c8e2db63652a1959e96e0aa0b8","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.0","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-QZ8RkwRWkU71CP+XG86cbFW8eRPviPJcfloWW3PfEgjtWza1/b3CxxW5CUFoum0TNFmaru4FEII1cVsIZ164tw==","shasum":"b58a30ce52996154c72253d4b827a14b386625bb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.0.tgz","fileCount":25,"unpackedSize":48080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wL6CRA9TVsSAnZWagAAbs4P/im/BmfyDo8H+fzt4yBl\n2Y2XKjHAkhcA62JgAnydNmiJoK1sZ3U4awwZRf0CGrO+hHYM1RywdU+B393d\ntu/jTKsGmJP5Bu2kjFtTe1GYSHRvtvK5CejkpH2IlCeKvNGkdHF4x13YKN6Z\nkXxKDxfCQWyqM9WeEzyRlaxRF9XYE6Awm4O8HkiEkxyzUzUDHoM6z+CJVGGz\nPu8vrF+il1be5apsiwCNRnAzYyZpRPr+R03oAvscS+Hd9Q6FpGdEbgq8vLE7\nlTt02xkrTR1HHhEWqHMC43M+Oj3fflCeaqb1jpYVEassrrTOXjU/6yrK2gVw\nRi0LLeDqGR9SE7mdyagvM10i3Rbt2OhY06mbUtWSlFmvgGYMvudffR4i+AR5\n1HxCeScWR1rkNE7U8OGvZS1uw1EbedrjRnULwlxRj5p8+K3BZzS/qKt1Fyg1\n3J6U15gbJ41mSw6xwkTigyaYxiDz69VC28qogyoqA9xLP3EGp2p2XhrM8aUZ\nH6iPtKgaSbjp/KbJ1EN+BYwDKfF+jJsgsYzDTOfAoZXWKnQKkU0haGy5Lldp\nm1Ij7Pruc7qHqSBXBxlPKoaACVv1bCnUqOcDWlPqVhWCmHAWzG1Aw2Ucr7CN\nBik1a+hMeLCCPNHuXx1JPoCGDhGCZ/GJILQigu9wttmyMslyeuUG7ugFD/00\nDR5M\r\n=8hUT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7golaRYjTTpQp3+wSqVKHVOw3rVKtw5L+3hOdMSdc2AiEAnK1S0091jtLM4B6qawJ0Xxhx+EEno/wuKsuMOyl5S1E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.0_1574109946034_0.7394097951355623"},"_hasShrinkwrap":false},"0.11.15-alpha.1":{"name":"@react-ssr/core","version":"0.11.15-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cf836e395fa93ec149dd8397c180f80888ddf0de","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.1","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-48GnISYlRUZWi8G9o8MZsWp7s2kll0kLXg5tYmxZGygLAUmQ1kjrgC6l6SgsW4njb9JKLj+9F5u/DsM1spQtCA==","shasum":"3d8ec4f1d485ddae5f7be117bff1a52a8fecd594","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.1.tgz","fileCount":25,"unpackedSize":48066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wRbCRA9TVsSAnZWagAAJTEQAKEiTXL59BQZkeRFvk4I\neLcrC3ilmizjUwJuLJVbF98de+ZDrGSH9ob247oTV0Bg4Cc6urAdUFAjgaY/\n25j3FB2coDQszRNLM1n9jkA+vjOk2284/xilxlqlDNv1hVI9/mmCbLh9u/zB\nwFzu4qGkHO4gE9K2mNbFTqGtSvTEznJgfiWSW49E5j07jA87/S5lCFVWvB0Q\nH0CNXdTGeI1tYC3S+4LTst19idqnQAgyswrkwN2vuZKW2VIzH3WPutpEZ4gn\nhv8Nkl8s2GEOPy2adXIwWhOLhoHOyO1LyJc4BPQenq51YXFYBgZN/w5v1jem\nYOqEJnfTO2m7jbFR1nxxcBe13qxEbSZUeVukvXyLKjp8kaC9uHG0v+Cqqzu3\njilc+uEViJfkZ7wqMEPoVxTFzmF428wIvsY/Nf1wxA+oSnA3N5KRUzB+U4f+\n038y7K84mpdOSg6iW2yxHyH0kGc63NfPXeKWxoarvQQlxEu58Diqmyi2k4GP\nthIMcNkqP/pfILYe5cFWRos0aqo2/2ntmreTr5SuSi0kNX9xrwqBoi6ASV2P\nM/vFGvj6M48c0whEMO/h6vIMpNR/KnLs8AoJmnnbDCPEy990qpMVxoBxSmoh\nB02A80Ti+9cIaNn8Ge9MLJIlARyX+0vtVq/XJxPi2qnCMW5Xuue17ZO1v70m\ndCv0\r\n=LMPE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDflePLLziE2jicxMrFp5GOfp68/h3d61Z4jBsu+oS+lwIgSO9iRYQs6mJmfynn1yXuAwSOo7GMcavvK9Jk0oyp3jo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.1_1574110298809_0.2893417853829987"},"_hasShrinkwrap":false},"0.11.15-alpha.2":{"name":"@react-ssr/core","version":"0.11.15-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b44fba70e5ae98d1b7dad11164c3458e8bc9d202","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.2","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-CHYKVHMbJX2azRE3sfKQL3FGh7VVRHKwf45F7s8g54DPX4ndKytOhIMceSJG4YjwHcFXriaRXA/g+96OqqRQXQ==","shasum":"7509b9a823b244afa2c0b863b67c03349152d859","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.2.tgz","fileCount":25,"unpackedSize":48032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wUdCRA9TVsSAnZWagAAsu4P/iR0impTGRnJYE98fSkQ\nMevWsi9fF0z7EhUA4yrxjPx2DcoYy2/o7zRgQ3thcmTe5R7Ld0OGqVfJsJXv\nB+YocW0YIBw5wiV/N2UVwhcrT/6e8z1yUR68K6nU1KFA6RvgT8TwDXmtB4dD\nvok1tC69UHmeM7PSQEmkwcXvuxFToJQ/xLeMDl/6OwSclJ6lgrPIz3GBLIus\n2FT5o3rAYa0xEkvf/7zLSZ5lFn+UlJgDM86BfkRqVwqpWlViIBNHPmlWv5If\n24FK1b8Ss28NobSLqdEIP25etXo19nXPh8yPBN0DUOTmwRYmBSovP3doWUS0\neXIf4lHgcplXGBVk2koBNnzauuNxKNz+Ku6ePCViSrPkNT3mzTLV7qdAX8IF\nK4uNws3gPI8wcqoqQF7numAmsBb2nKeaCEl0uPVXxbX9qsxgNzUX5Am1+1DQ\nUfP8qTQMS7+xFCu6fx9YA4ecO1UrcRs9uwmgxEo6u78F0Gerq/SCk2ZFz8e9\n1I3qzGuXFZ2dNN5H55uawe+PJPv9hRR54AggfNvWsCJZuCTAThSoR+g8NF13\n7Oa7kwz943ZG/5ounVMwIq6mPlTwpo1fGOjIQOYxrCwJy/481jGoqZYxT+Qz\nvH49x3rp/+z9qSBO80OthhS54hj2K8RK03lvJ+MGL0XwBO4uQY18EQsthVvs\nG5Xq\r\n=c71+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGcoT9M+B1NLnBee8Hig6+glRilDaoQluSFL8N3ypa3QAiEA9Mg3BWEwYFZrVexjyZl0WI8HPxI4nb3k2OEdWjPDzVk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.2_1574110492549_0.7145507394920843"},"_hasShrinkwrap":false},"0.11.15-alpha.3":{"name":"@react-ssr/core","version":"0.11.15-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f0c1fc665ed7cf01eb94e3192093e1d1ed98ed80","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.3","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-sD2KOAVCmdG7YeUeY56UsndPyg4wk109SbwQ+HussFIDOeSiXZuOErrTqXLVoA89gqVueAmxp6EALuewy7+o3g==","shasum":"62ae6c8250470212f94e14eaf4b2c918777c4dfb","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.3.tgz","fileCount":25,"unpackedSize":48081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wX9CRA9TVsSAnZWagAA76oP+QGZatUADAg5Ab01Jg5k\nvd1wnCzrM/W5ztUjrC1e4ByPfrgu5qGAInPcwXYefg9wMp9/2AjH5+JAMrPh\nbvu6ZhoOwGsXsJW1V7sR5Vhh/kYiceKyeG4pJm012g1XNFfOPVjMumFwCh7v\nab7/r4Zjn3tzW9p/XK54spZ1catGm6jN4SzY3dbI8nsCN031BRsJren+8lm2\n42lP1zdwdl5d5Fe1f455iaPD3Wa4UDkG3PpQckR96hu1YjKHxXtxMbYetPhh\nfX10RFl8wZiuGW8JFoTiOfhHOysagDNW3YiUwtKnvemnIC9wQpzUIVDwb4RD\nqsn2PABlIwJ8taQUWWjyKHKG8W3XGQOAxZjQZHgg6F60d3kvyEeSizbfFGZE\ni4FSd14d6LDOG6gq21LA1NSZGYiWJyihr66Xu7jSMsFgoMSRFkF5+6W+8NIJ\n9F6Z8ma5DUzSWIbR0tjaf6E0IcNWdMxdHnjrVVR/dMH2T6jis/AtuCAxVrx4\nF3iaS+EQvaOYz60rGO3XJhIfSLbAIeieGKdjzk5ghxngr+JiEIVRvNkgfASb\nzfHTTfTJqvBTWRX367wmqkeUqYa29lSKhBDkSWoFn4lzuMDXdwbwETfXDo85\nNWF077ljoZTEKxAOUUTULKbOSc9pK9JZPTAOklnZSe3KGiVhOEDb7Yd5bDJO\n14V5\r\n=xx0R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsPPiCeXz+P0X98vegBrAw2x9MMxxcnp0Mcs1LpD5ZNQIgCdskiILXSSVzRNxPSV4ZQrZR9KMRA2X/GQPRmN0lr5I="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.3_1574110716920_0.8752947814975176"},"_hasShrinkwrap":false},"0.11.15-alpha.4":{"name":"@react-ssr/core","version":"0.11.15-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1184d436793332a35b2a53d9c707fc6760acab34","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.4","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-eMbUFXkqNtxYL1v+gtmnSOe9KAlue5afUomjT0vF1Z0Nu1Zn+2cF0WPnLO1IEciV5N0TFmBdxzGirf4Q/bvJdg==","shasum":"6014d612c5624037df071438d1227da306bf76ab","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.4.tgz","fileCount":25,"unpackedSize":47851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wbbCRA9TVsSAnZWagAA1pwQAJ0THvXHHrsim3ZIwvs6\noIligs3XsAM8n0XYgoZy49JtQJXoPa49h6AtsP2n0w9K0RTN9ruYUxxK7ZkW\nLXSBTBrUqZoe6rLKOX5XXFmFFvQ6MHUOM6AuZbY9/PCwspjAfcMM+XzFoEfj\nSS0Ark6r31IT2wo4D10q+I3wq7C2+0u5Ny0POL30olsK+3dcc0oaSxxcsaCy\neRwpKH0Nh9fwffRFyZnlEXbdywz4peJpx2Mb0Qiy2LH1OLJXvKQL520z2v0R\nfYvkXrtoizdKiRXL9BkKzAEFYRPIJwFdokjjXEaxtMuWK7pe84GbwiTuh3Zj\nxIrTrqaFBkC4lMEBWWe1vLmgoWk4cq+JvGssSH/4pw+Cst/LiP0sp6yc/jHk\nYwgW8r7cexdREfT56skRvcXxltNAvTHaa/3L4HM6riBMtg2pNDOFqx59B9jw\nbULb2iaHDkBqhRMoktc7tbqjZp0bUerd2EbyOiSSW5xNXe/a6NJq91vBrqSR\ncCwqzmsyV8wnaHfEonmxheLHSYhaNXMFRy0wGb2V8LQHZn7PHjsMfXztb/yy\n9bl/DmCZu2F85m2atSY79wzidvs4GJFjf9comktO87LKA9qCdCX0JnRPehst\nvNAyzXtM+A5JOrhNa2qdRUFKVNfLKS0qmqA1qkZ55Ufl6a2d6iIM9+h5RdWL\ntGgL\r\n=WrAd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiUQdBSxSYeAO1LvQPmVcffPCNPkEmVv7PL2KCKp+aCwIgcNeDS6I6iUolp1Km5iXZ5biDLjfYal3evsS8G++XUIk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.4_1574110938939_0.420054206646836"},"_hasShrinkwrap":false},"0.11.15-alpha.5":{"name":"@react-ssr/core","version":"0.11.15-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"796c371e9207a00e96c15b41ac8ded2d414f8763","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.15-alpha.5","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-7ngCtDHbq7jNRQ1GIVGPKBA+EAUoxGgNRd+F7+FygPDNm0AMGOFaM2bPMlXsYUg6BqOtMFb+BUczlCfYmUxwgA==","shasum":"0a28d8538f842c0f546cd35da43bb9bb7fee451e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15-alpha.5.tgz","fileCount":25,"unpackedSize":47836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wexCRA9TVsSAnZWagAAaTYP/113l3UGMcFVRFbar0C4\nLXjemLPIuGHi1Hfu3CBc+s56fCD6yob/Vn4yi8skm2gs/DhsDKEiMuHevKiG\nngb30szeTVMb1G0FKkemHPqu7H0RH0WcZSP88nVIHu1kP9IDShNGAH6EXCz5\nfGivY3jgkrCcuf30zmqUSVhKrE4o5mS71fu8Ej8HzwHF5UhA4bPtI43j/iNX\ndxeUaGBZagzgyx1cqCIOzWTlR/I3x4C2lbohDyX49DHwctZ9PYvrxbHjDzWU\nA4SYcOqdeCSSKtW8/58I3brTJZ7Rz0GRE0rSxnbdXtIK3yrXM4z22JnktCVu\nN71FSgGRnEyVu+CedycT0HM9SFVn9vjQoPFpLG1ZovnLT9hYosKk4Yh8oxly\n5TzznN3MeJKCKBLZTb3Fxd1Ff7GhEhQpwIUiUuX4pjRdyBNfla7RjoKPTmrF\nqwfZKx/VP6vokTQH6CnXDKvYaLxnsxIfTjuy4gpoOhT2cjLjJvnHs6mJjE0r\n6QsZ3k1Q0p5c8Js7xuGc01zDnPZNCbhY4/e6StNpbBuZ1E/NlOjM0XpHTlT5\ngiTy9/RI6WuKZyptjB4t1UqfgDL19+IjS8OdZruv6ISwozQ2Fcd4E+mio2Zi\nwb7XuHmjEkq4jhG2957xEqfPVKy/XwS4STnksfdDrJSKEMz9QsZ1km8KrnnO\nSWE7\r\n=A2LT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDew370Pgpt6/O6/avEQR1d8jGjWgnKlFL7wMRG3gNHxQIgAWQ7s3q7O1BfZ62EaQjOg446x5QB7GCDK+Lqmay0Jcs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15-alpha.5_1574111153392_0.7696850366179024"},"_hasShrinkwrap":false},"0.11.15":{"name":"@react-ssr/core","version":"0.11.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0b3782e57c1a3554628f7d25b98794ab321d56af","_id":"@react-ssr/core@0.11.15","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-FuRwu0Kz3/wRcgv6Hg8YRH0hZ+epThLhR1vIkuIVkVFq6qMnQyxBQhp7/EVrkmHW2TvZt6zGl+OrWZQwvmTlvg==","shasum":"778aab52e12d803929ddefcb663658fdd566de26","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.15.tgz","fileCount":25,"unpackedSize":47820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wgSCRA9TVsSAnZWagAAPAgP/2kpzdQq0hF0HnBQmwQs\nhNnmHqRB8HH1qr5GXUy+F8csAM/Pneh1rdHt+HsUa1j/cQ2l8l1yfGxYUSqu\nWwdcGiAAqKY1dJwKMKEE5zTGnOwHpbKfNGikttsK9rf+hNUjgBSZ20ZmGPdg\nc4w7sgMEbzQb+HqE5cQVer+xT0suiOPQ8WQg4NdEN3lug6ji6cYN6oPcMoMn\nvrFEH9T7MfyFv3tQR7aFQEbqyL98MtZoy8iPUD4RkgTvkjmMKQuUUIoUFPmE\nrE9S/TyK6aygGrQVZzsz3py3teHNmweiinKXLmnEZJdZBmbWGXFUd51YfWbc\njkZbXnGbRFxwNxbfnAMyosFOCOWTe8PjUP/p0J6mBCSrthAEqGhKnOdr1jAp\nYTJO62CXZb6/YPx2EPRjuZufeJp2WU1Fvc/6I2ZYJfz2bgQotE8mfV0RtsSt\n1T2iZWhkOslfb0zZBzgZoSbhFbraifU9opyYRu49thiNfX+jpfvRrCJ8WoKo\nzCnjicvdQtFmxhw3r7hNPS/fo+6bho3gWR7+cSJr/q7JWO262f0WnSyXaNna\n3AIg9NdX5TvZr9iIbl7bkhsZDR9CCXAFOQKRKJH1qFbmyFxjIItUW41srYve\nQJ/Zww3jTrcxOH4aA4ygJWrpkknviSefXzdpeYaHbpng4I4n27tRAZDE7/zn\n2Bp/\r\n=xq9/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkhh9GULG6oC757GU3AXkuCr/hY19uv/uMvc9zyxPWFQIhANWnqHddgt5d1GrJSjy5Kkf9BygBN7E0pyD4qncE64gB"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.15_1574111249498_0.8326147488021227"},"_hasShrinkwrap":false},"0.11.16":{"name":"@react-ssr/core","version":"0.11.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"^3.0.0","rollup":"^1.27.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f1c7c06e5016bae4eaf2f3100f801250dd45c88d","_id":"@react-ssr/core@0.11.16","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-7qhl7W5cHUvUYhUT6TOX8PhF9YDU9r0t+GXQ2IatHDYVqywGBZ8jiIoo7/InzzoE1p9wR5KCR7QYXvm1t7Ju/g==","shasum":"2170d66fdcef8b3096129d2313aa45143d0da7c1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.16.tgz","fileCount":25,"unpackedSize":47875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0wn6CRA9TVsSAnZWagAAQE4QAI3Ss5dJXn1QMung4NcQ\n+0IP2qKps1MvjPu94O19Y2u67wnsGkkugWdgByFFCmNexcjvt8mEW1Y9Wh0h\nlttN9S7EU5u0sjFrG9iCOisLnG8uXmUJfDbc9SBRVhkMSVqprAYEf6M8XI3n\nFP2QAnmtQA98if96zbt/g0EBXhnWZPPH9qaYjQDjemgvSY0FlCty3DTHZzet\n5ijeF8cVowMHlE4GaFbKqqAI/XLXVOsI1DrbZY5brFMpw9b6fT90AmRC25Na\nhlD+GqEiYwlk9XEPu08YbHtMVG9WfVBoDtcUetTxT70gPRhpRZckiUHlU2E3\nPfawxvjjFnRFhQEMtdw0ljSxvhN8Pogu9pFnJPfwlPJ+LFdbEFOcvZPlBzvK\nWxLEFbH4QRBGuJffcw6KMrQjMbJvuvpSklZoXXZ1okfpZ0V6aTAUILXz4JrX\n6Q43niC/a2wwjbpB8kA76UK3B1ndTMTgdp8mW9SrczugrcYLIc19+nlusE5K\nGvQ3aWpP8W73NAlo5zBROtHTULwtdvJB3KDXdzGwk9OHB+rF/IsIrVPHZKSK\nYzobP+I46U7SW3+C+bWwT/eWtujni5n1sMXoi2TWsq7ubi5NbBucxLAlVDj8\nHrdkgni8oEmTnOzmMUZURmwbwKRL2BBUGWjk1BY7U13Bo3TPGUiqHp25TYmp\ncT5N\r\n=wmrY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhWtMnMscWGqg/XsqrsUddmPzWt8bUZse6H/TwJ3WRKAIgIVsmYv+Q8jDXfs389NXkRL+s9BujcL5T/lBFN6R8ULE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.16_1574111737984_0.08551237956748992"},"_hasShrinkwrap":false},"0.11.17":{"name":"@react-ssr/core","version":"0.11.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cbf303d49537fa4e6fdcdbdbfecc828ad1e311e0","_id":"@react-ssr/core@0.11.17","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-xcpB2MP9V90xTs/Hl5YgK+1rnPfz4NS0ebVIUAfP+0tIeRo2FXOdMFIckw4Bzu+NS7HRtYkoW5Qd6DM3Lk43Mw==","shasum":"907748a09ee73c00fbb42018d335c7df7c67f4fe","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.17.tgz","fileCount":25,"unpackedSize":47875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0xAkCRA9TVsSAnZWagAALvYP/iCJrlQV7/QyFwGSguRB\nPoKKw/LlppPZUGzv/+f0U/1N6GGBVLqYQ2g0sLHD8bABPyRRp6smjn5xwmP2\nFtWMuES1d03TMfXqzEC5n88Is81Laa5MjE70hifc1MTPLJ4MZdOkSPnfQzeT\n0a0S9w8NdXf8avgJCdsg1MjOnCeMX1M+1w9Vltql4u3LXV3gKJPmkFEe3kaE\n/c4qQr8t4Otf6EIrQnDOmGSMWe1X+L1ThWFJDXQpucyKGR0BDrYnleSc5GZ1\n5GjVY4MgOvxKZkFemNaR8yn9qRvflCS7KeLo8HRtlxyUScd0o3CuZ5fcLSk9\nSBNMdI/T3X+WXZOb7g8bL1GInsJ6RhC5APN5ujBZfm9FYnJbX+JhuFwnKZwC\n+imYsrKEnVOpKX8jRS0YgldYQ9yXJTbYys3ZYaxSadwk/mIdU6l9VDLkacDG\nS/JttGi1A2WTP2tThJ2HfH+qnn2pN8X1FmyF4yur2HIIFMkXhiBNDjlyZsxo\ny2wVGJR3p6eOvoWU80BOp61F05ubuTEsPAbSOSJdrLzNlAiSDai7WUXx/srh\n6wC7lYQShpVhdKIT7WVqtpQuIeV7snBCkcM/TsIE0vuzc3b8yjAtgrlyXdGA\nMM75AwKaPcVZiEiGqJA7iFm+OY0ChMd/h4q2o0uexGsrk+fRqYgxUjva9XLa\nIrHE\r\n=BCmQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlFhDg/flJmlppYAtq37SlqS5VQyYpCt+f/a/t7+kENQIhAOpCzRMX4drYACIT7IwT3OTyX9SmnNLDzlmWufyjad3o"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.17_1574113315951_0.1312448587119679"},"_hasShrinkwrap":false},"0.11.18":{"name":"@react-ssr/core","version":"0.11.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2979a44f0558aa4072174b3fdb8aff827f78f74c","_id":"@react-ssr/core@0.11.18","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-qO4KzF11gySHO+lj7pXpbgKtCS8YgFYLriqpwkl+Gn3rmedXb3amOYX73WssT0ksCst/24Dh8q4GAA8/C3MsvQ==","shasum":"0ebb6ff56500597756f03ec7e20cf73f92eaf004","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.18.tgz","fileCount":25,"unpackedSize":47980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd00NYCRA9TVsSAnZWagAA0fsQAJP/6VKIzUtgps0h/Km3\nAnWFOL9T1KNHELVgsJObXMfdysrTummZTls2pKWI8Gtdcvti9HonvTh+JZxP\nr1seu8UoK9ZOWs+PsTe+G2lxSxJNjxK9g/9IzBQASsaobceJeMflgwkLuADX\nwtdnjlMhetOoTq1KmHhOg8Qt0E7YpCzheni6PTAnerfOPWMh+ce6Vy3uSHzG\nUJpW1qPuvxURRLrU+XVxBG+pb7hfFj2vrCg5Z1iu/MJOR5G7tHTGgRfCvZet\nzlf9gQDi0KC+2WsteCk0qvXQsx5KZX6PKLc+xfs0B7pwj0i2I5NgQVeFrsJK\ny2HwKZfjBSNKvQbBJEzHwwYdEgwgY/hK3PPUSV64ITZtm9jF8v3jo+jixSlU\nUee+vRlljlU01vCAovMpOKYDwbne69ZK9Yy3X0BYR50scVrTp28A+sUG15QU\nbckXH7YaSn3YkYgxNGBdu98eCQxhSljYbWKxKJzpY7Bal5rmAMaUaVoFP8sz\nicNWo+2h8ZXcrdRRLfjgkJUtfncN/cQVKAf34KogmmjOkRvO0yv6pYTkCy50\nDIJ92tTxqF7lvJZurt+fOxrkVNsGkzSsfpgo9ZCwarukOD6EbiVpHROsCBAT\nJbpzsbrSKup+/+zkxSretQx0jrtr0m18TqCue+D9NRAVFvloh+gB9t2EHqJR\nh492\r\n=yKof\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEC0aaZtLuRkHcGkWDBRyQ4nZjAoVhEhqSz/yBfrGM4XAiA8D0m+IY9gwanrkxdqWYmXFPXcZOHuGouzCwJJ0jpLtg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.18_1574126423596_0.8318810669445356"},"_hasShrinkwrap":false},"0.11.19-alpha.0":{"name":"@react-ssr/core","version":"0.11.19-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"14f188c58ca3a8efa0b4e187535e2dc1bd0e9bb1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.0","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-vvLzra/H2dtiLDzq/tH6uKKFUeVhGQFOv72Y0XZYz5jA8Sxu3y3tz+s1QI2mK/IIN/6LZ/AX0cs4rsf7l7in6Q==","shasum":"ae4db9baf381530d24d76da8bda35cbdeaa37afd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.0.tgz","fileCount":25,"unpackedSize":47952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01K+CRA9TVsSAnZWagAATdYP/0kpPRmtRTuickkYrX/L\nXhxYD0gSPKYopxmnNBdpyzR5uVGZkPB9YhBM9d/o1qvPstIcNQ6dnG3kP8eT\nlXalkW8ZQWN04uo/nU3DGOMcuLkCAecuEzUgRnpmywf9EUCXAaMiCHM+vc/s\nPGzLguk0111dK42GM49U8o++OBYD5HoA3l/3T1TYzygpj9jYqpp9WpGwNbzd\nhVYCO19uQy+Qiej+44YcqrRdVnhAy5nNC8w76jT02U9cMHFSAxRkJqHBST/Z\nKIirXGfbrS8CTo5D+bR+DVNZqvPXv8Lfro6dxoGwEK1nUyID88lq6Oc6iIXK\nVrZRva/1AKd8erN0q7FcIJqPCvVdkidBtBT1wo+x2Y+6GOgKF+uMUzcUjYmx\nw5Aay7utfi2TdlEU0TznNabavCkAnS2LodCbZmLxO35ZWqFl6tdmT2ttidf1\nBYng494bpZILiC8iRuGSpe1CbGfXBBo0HuL2Oi2sYZz42AduLpOHX++e6uP7\noGtfUxwmla6tqtF9rHZxnikR/+l4WdcbInTvuUgPSXxIJp15OvoHwVvZNv2c\n0PHk0BDzlD/YvYv8wZdbii6uY+dEN75HI1PHYuIicdmSigzHHzAwN3OREa/I\nE8+gtOvBTvmXs3yy4sQs351xb3qzu55TlJOhSwbtvOqGpowDXmOD4ZU2Yn27\nKkAz\r\n=2NG2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETtavDvU1L0LlRP2xKI/Okf3cbQ6HZa4lJVQxv/tanSAiEA7CcTMMzMSYPSO9Zc8Kg7imY/zAg0GHW6t/TjTj7m9Js="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.0_1574130365546_0.3722722674965251"},"_hasShrinkwrap":false},"0.11.19-alpha.1":{"name":"@react-ssr/core","version":"0.11.19-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cbc60077921b98c574d6dbdc9f5ffaf6711587e9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.1","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-rlrUtdNATVVd0mI2b9gQM+7yqqc0gcWYdQ0OEZ9y+ZsmHAOhSrOaGYjkqA+T8eIkir0qMV7z1rbXBWtm8lKdCQ==","shasum":"1b34fcd9feee3ea264227183fbe3b22533d04d74","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.1.tgz","fileCount":25,"unpackedSize":47920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01MyCRA9TVsSAnZWagAAlNkP/3wvQ7c8AHJEdVOdfDZs\nlhH3RejV1Varg+0C+pS0PZ291rlHxtfkmLBeJkunWIdmuXIiGDQ4THESxcTJ\n6YCMfmte5PXdRPzd69oLB8bfjsXQecBuKlUADG9fRGs36YKNFH9rr+b34ipj\nTqdWHjkVjlzjOvyDXkaF2EaUwV2B1eC2Veqg3YO5N5zQOrtJYwk/XO3r1fb2\nMqxHqs3MIrqzpF+Tw6LzLptwF0RYTuKiM3m6SA+nr4J8djHVzVayJqBpvdN4\ny0DFrvr4R2rraG1hpuHwZzmbvzOv6NTYbvy66/j9FHAWa5wCKA3gg3hkL3Rz\nZHBDT1viVxMKtacR8I/Ky6INrheVCEWYi7MrXMxgAfoxUr3ufJzxkGRBx4qr\nJGR/A6BJwZD6gEO6JhNLQe4DMfUq0Un+wlXQNH0WitTc35RSMNQRkTBQJBKh\nz2ljrzNQ4EPdL9kCCTSZFV3NER0jaEGCT5elWaz2+srJge/GfDFasaGGBruK\nnH67KbNkuvRHstXGc6BB1SQ4hXoWIiQ8G0L7+NGgxzN4QA0RGQH9g4aIeOlB\nnyQC/+rn8Pzk76sot+0Ry3t3cn50AQXKPTOscv3luuZVA193/W/sXdeSopZ7\nXo+6KwNv6oiftuyTDborv55r6BQB1R60o/RxaR1hy/wBsmymUkm+UPCDz+gH\nFo1i\r\n=JnyU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDutDaBZhyyItad4epnSssQM+4T86t9znEl2pmqSJ5OFAIgYsavSOUHrouN5yWup5gYOyHVub6rRG3/F04LbMOStjE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.1_1574130482277_0.9273308411380206"},"_hasShrinkwrap":false},"0.11.19-alpha.2":{"name":"@react-ssr/core","version":"0.11.19-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"520960d4566129f950dccaef75d70e00039cd38f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.2","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-CuTkewVyZyHqkXVCRgE6yCvIy75WsoZ5Ziovyo7TUPfQ1004q5KYzqME1Oc+h3gdjM1HLpsa8fapaSse9pEghA==","shasum":"3cd7bf54884acb5e85940c4269bd2e97d721a095","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.2.tgz","fileCount":25,"unpackedSize":47857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01PRCRA9TVsSAnZWagAAZpYQAJhk5iz3B/DtyTKQKHUu\nXqyefZC/Ls1oGCug4OjwdfiPgkw46YHBQnWZgJNIH4It9zlseVMA40ZN0Qq6\nJOudQf26kIScI+2rSJBOT0/62vqhbFOrIohh5ne/5gaA1EqjXYFUXIYL1ynY\n5LLBtrz+sPSqLqR0lsZJZ21HvrkCqShBdWbA3JOcgOPn0QigdSntLFV5fFck\nU2tuFJBrHmHveB3qwNg3tV+GIBWXsL2OWsMyGxr5GRFH+Nx+L18faitnWEng\nF4boMPFqCGhdBOf884PYa3Jg7ULvSjyfU/P0djYX0krj5oRcy+NnNs1DvJ/m\nspLG94v3rVoQw39LG4cg5K4QN2MKpKxucvkuAO8PYbleyUWqtZv8dVSkaaJ/\na3CmtnCkKMb9zQSHGzCWq6/oMeXDYxX9fEwhlPOJMwzmKWzr5vF+3L0SN1+X\n9yKuYqxSgqaRGxNBAj3nXFOukfzleShLn5dVa61a9xQNH4KOLB8NkMCKao85\nep05W9SPt8tGeG0R7pZggmHCB2udjE36YlK8YLJ//7TwNAoNEr3yEyUCejBc\nzsd+IlZHfgUleeZ6VqhUVbzkgwLGdfQ2YowCbZp5z0KrWMvcHn6mdFlhxwjV\nh2zWC/Vb/MSQcbsUKIGrF/IsbLhqWhkyvfsFc/fz8DqBmL+dE5SelHZn2P+m\n+QDb\r\n=nUL/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHY819++es2fcCX1Su6GdNaxbSy7e8hLv1Kv9RnayOrTAiEAr00/4tjKtPaRsoT1TbFdAYJLIObB0o+tTu1yrz2RPJQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.2_1574130641127_0.6054055509452159"},"_hasShrinkwrap":false},"0.11.19-alpha.3":{"name":"@react-ssr/core","version":"0.11.19-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7611de5d1b6c326c2e066b391b41dc295d9e9e28","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.3","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-vyG2yy9ZifyoBzP2+JUg5zohN6NiR3PjTXYV28rTqOPtdaycSH1VPQIOKRkz9xSTM1Km8RmKVPwyNyqrwnBwvg==","shasum":"22e05d7265771cd4c609b875e59f98255df67ad5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.3.tgz","fileCount":25,"unpackedSize":47872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01RDCRA9TVsSAnZWagAA2/4QAKRvrgtFGejoPMgigX+x\nXb2fcwYwSdb+wvladMT2Y1wOx+Yg+O+HDbmMkGbjBYC4DFHkdAPpArj2+nFO\n/5yLnhAY6VN4zQE/r3buIaBxdN69qFs2KSpiEZEQfrf6gyYsJL7Ch4uuLMuL\nAiRCEVctOOKeLv6LpkCTS7VqP1JUclm0E33LzcKOWO4zpXkRfmJCTkb8rAkj\npuLGFvScFcCVQZmf9UU3CVv/gGB/pmBVs3MYWZyPoDBTVUroBp5AyKBGn3ps\nV9WhKbPWU+pFZjtrPj8UhgW2Q1Rb7NSDC5acVIwlb9mYIkJR3vI3vXqFx1+7\nPoTAuQel5TCZ7p+1J7mpVZSRwdSehKtd50cZh+1cbFjwShecIGpM/yqWbpLb\n3jrdzPgtndPmS5SzmgoXR6brukwtmlPy+unPfvmISoOZXd4Z+peZbcgyNwGE\nqvsq34KZ+oFjJ/8NPMhwTT1WLWzFr2bMu9KuYF2M+TIK7dL180wn5yBYoKWN\nCf5xC9umfZ1O1mztqqXWJROdbK4wpVR7xLMhgbJK+zaEx/lKnDxZrwHiloCy\nLuSvX3FEvuwtzdbfe6L3nRuGByil6VYzmEVTcHlyETgfmK5zcvbNtGdYI5lz\nJIPcvamZYiv1SHDYwA958RWl5llgaUV2tShxj7bllewPTYhTMW6rKDeRx4q9\nU6XT\r\n=z09q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxs/qgyOgnRQ3aTmMs9Bk+qLNeAY/QbAfiMa3mXM7KTAiEAmdJ0wuQIZF+YddUF8I12272MFvbQBYD+H7OQ74xQB3o="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.3_1574130755329_0.5317968555991359"},"_hasShrinkwrap":false},"0.11.19-alpha.4":{"name":"@react-ssr/core","version":"0.11.19-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2cca9dc1bd1658036527b85db7900ab153635a85","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.4","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-2KCMkw+ZrMvknyC7A56eWyF4x3Fdgc5yZh3U0CpqDnUvitWOuAB5R4qtIy8Q5px1vqxexE3EORoQSe1wk7GT3A==","shasum":"bb650e06fb1e2aa41b85d8613d094403c604e829","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.4.tgz","fileCount":25,"unpackedSize":47983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01SxCRA9TVsSAnZWagAAInMP/3yQhwCMDi3qAf0JQwlp\nOIqMAF1K26DskJGJzZ378N4SeFa8M0ZPk+gXJy9l4XokOGo7pk1GoScdIR23\nTXgYaZbiUGrodkHqWrdYFkmRllMmrXFFB0bUxhzDxj3y5aqLVAAIR6UQlVQa\nd9tL8sRuXHqeq5q1u6jQo5lpbZX3JIyaJ5i4P69pFGFyT4R4R3h66nDqePYn\nIT5wmE5lzD54p1fgx1qKUSSd7b249qpNfmgN3b2wKJdct69VHyrDzWcMi+UO\nt9Xzie1YEvF3EPVlLSngsPeFMnfE2uXMQk0CnuILc9K0j6r3fI3hahsZEz3v\nRLJbnp4BYfYKjkCiMZwPVMM64KHSBbxh4DCSJ8XXTdoI4v1L5IcWoikR6K73\n3doknkCTZkmhSDJ6YY/r9bYCa2PKcifulUiDqiEIvjEmfkdKRqYhnTvKQinb\nCLU8bVz/VyTcNKKoMf0kJdoSyVnOeiVA2e6h2U0XxXRZ4PZ+uBH/1w/fi81q\nrZ3URS2hpOQqIxBgvOt0JLJmOqp//pqztFrXwycoXnh060MjcMCqiWHvlImO\ns+hhZz7/b8ut9B6Ujewc3o0BxX2n3gjKbv1zR6nmsM+zK59DZzRBUPXwbXH1\nmWPMMwuiTi6G1cWazq7yJ+0ZIPl1pdMIEeWQhtyafltrFjmmxpR4NKcDOD27\n+39q\r\n=2nj+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8TNzu5QwOopzWx4LbiM94NONZVDYOW7Uu3DvH6TLvNQIgZQk50t0/X+mayPcvJAbkwqPoqEpvY8inomoN10UmIBI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.4_1574130865050_0.08565696811320334"},"_hasShrinkwrap":false},"0.11.19-alpha.5":{"name":"@react-ssr/core","version":"0.11.19-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"163a3118d3d5883ba997c0ef4cddc0e65e3c292e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.5","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-f6WjGkLcT8SUZOekDtsIF77EDbzg3KOs/EmEreiXYCGr++0F2IYAX3l3MolI11GDPrfU6oNIKk87qgnRt/soiA==","shasum":"1a0e8356c3c77b4fcc15abc7fe33e1bda9b3cee5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.5.tgz","fileCount":25,"unpackedSize":48009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01VuCRA9TVsSAnZWagAAi40P/0f6woGrS5zR4j9+QVpS\nP+WjW0q8G67sRP+9uLz6D23+JV1ag5l2tDjFrDw4/pqGhw7YFJ36I2BafP4R\nsL50L7Aa26mT/fmlfgTI6BOp5hG0J6UTLlGd92kpWvnVWWPWj3xLYO9GiKUh\nyqqRJNbD1aTxgPmfBgXjdNmMOLnKuI3eNXNV/txyRTMt0TzV2ymou801/DkQ\ni2RT8RGO7VwUoQ4ynzLkyjgVzK2NKmAQCG7NrPRuc9N2qCWztqkEPOrYQr2s\nESBTKSzkUIa4pX7tskwbYaXJ3oFFw+UxI0uy7n0daoOLj2+ogvpTCSAqBypR\nUIqlFM68yHCWnOon7l4vaXh2UwXFboMn9qeB0OcjV+r4H4SUqSLKRscUD2Vb\n0awOVOU1bUCRO+I5PWxISbMWfwQAGE1Oef0Bz1tnKYIYcGjUWCF3Cg7jknA2\n52NGSdVwxEvygICxIITKd1ro1pSw9hKz8cM2QKA7bl4u8sNrpvo4mvnsUwYp\nv1+wh/aziWU0+MFkwJocAy5ZfrRUZUNbv0EEvAKyqwCpHXBg7chrf/GozBBG\naruCmX3xdFe71/gHIN634HjEdmkJw3E0c3lvPgc9M2GoboJWrh0h3nVS4OPe\nldOE+3gwefaz+saP+CVN4+4lwO5ytcJQkGI4/DUEg0LwjSYMNaKYNts4C0bQ\ng17E\r\n=vPIB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdpQgsZ5yN9f/4i+O+GrqX0zHSaPUru1OkEJf8A8km1AIhANZ2TYcYRKUwk/qxruW9rjAO/9gZVuAs5qmAlKpDA2cN"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.5_1574131053542_0.16888811015367056"},"_hasShrinkwrap":false},"0.11.19-alpha.6":{"name":"@react-ssr/core","version":"0.11.19-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ae6e99284419949cc405d7ff6b1bcd7a63f2d357","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.6","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-Zx0QMakub4GmQ83h+IDFEw2Xmnx9VuA1M7qgEkUwZPkJ72ukacLoVBuhDv9f52QIw1L6bmee5nhp52mj7bWyvA==","shasum":"f9313944dd71f4c860c93604c56080e64a9a4823","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.6.tgz","fileCount":25,"unpackedSize":47970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01YICRA9TVsSAnZWagAA0isQAIMMv+j45Vx3aCMBHZaD\nj1g5iwrS3tqvrByxFgCZkM8TDI3sT76prNhslDdt+47YHSFHwzS33AFrnz8q\nl9bmYw/ORFH7RR4YcPmWVFE4BN42YvBxDCrmdQiHbSpljcYT8u1JowIhEV1o\nC/xk0i3msKZpAbsFCeAwiQlLThqwB9kMZYHuFEPjHmFo0nWoZrptqY63bKxR\nvMJjDQ1n6o25j+10NF0JWrcl6bSfXZeLgaiEM+ETWq2YleOWtlDD3RVY8b6C\n57BW65QTp+NdsVknJgC2NGRpEYg740IfLM9tnRdbK9IQ6BRVXrxwct/XqTWO\nJyzBPQv/jVxkbVbKjcx8YaojnpxZi5KU08g3XjgEs1nigR8Evh2sYEanFYd4\n0MWQn4x8tz/q3J6xg4ufqe0UOXuwGh1XrT1RMGv3e2qLymxHk81qe2aLDVhL\nHujOYY8cdJXWeDeZNYUTy4DFWv1wHrE6x1Hgj8c/F6F91WSS5u6MInjyeCsM\nTH7yvhxcnpEjz65OChAxtWYUqbGuHzyxW+HWmRC3w3540IG+ggXtOGM8UqpI\ndEPWhZm2/cy5dUlu95pOmrXzVV/2lJ3GzMkB0BR8WIkq8wvKNC6QR7wuAAUq\nf8qmoqN7Hl8+FLKmWwax+IjMaI2nVxQJD/Z4fY8bd3hKdEQGqnmd0jSvBBNv\n/P+w\r\n=eKlP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv/abKPTm1zL6O9Gew1dfjho2gYOlKJVnSKSk8KtEdsQIgGEy/W8I+4ONX7NvkbzbRrUyKxhC3JcCo6oXx49sU6O8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.6_1574131207892_0.45865007654962575"},"_hasShrinkwrap":false},"0.11.19-alpha.7":{"name":"@react-ssr/core","version":"0.11.19-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b6921142015c6a9cc1d86a11c8dc95ff880eebd0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.7","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-I1BobuZQ69OvqyI/Spq/+8skeOos0a1zB7qEQCdle1kfpZ4cBV933bKtWFc9IdCqPs2ae/DkQKQG8TrvlgOIbw==","shasum":"186fc5bdceb43452c585c74d704087117875ea09","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.7.tgz","fileCount":25,"unpackedSize":48066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01bpCRA9TVsSAnZWagAA33gP/iPcr8bbW9LZFImEsn79\nQcgzh4krgN/E2UrtsZeqUJHLQNCfF7P7sIfdhp8ILjYxWh/aBsFDubf1ke3g\n0J3+u9EMYpLUWap0nRSVZXANHGVHf8pm8t1DPIupae6ZdHI/sqTZc3Ip85q6\n8HBMDRDyeZbW7LQlGHxd7OfZZChYOj1oTNLUts+iKeKd+TAsJ8vaTu+Ld0dB\nZTkUIvciZqbG31esKdV7DuuCmh/M7OsayOsY1DeoeHo8T2oXqwiBJHSUaSt3\ndE3wmQwraQe0PcKkyfrmW2aMFPaSxtQVZZAd6L+sdMYsHS2EQd71RrdPhDD6\nNEd8k8eKzRfW1wShTMOXHqW8CwtThrEzkOFq/aI4J7RPQZNEV+l/DvreGEJn\npHD8b5qhSgT82DZfI/ElTN2MjZjaMAtH/32AoxuPv4ff5F/JCXmAoCe2bAil\na/aNk//4gwlPfXgnyoe6uZrJzgjmocuSNDyVBkzEsgjehGkOj3GIiBxmSbI6\nfqGWWw35wmYpCTIxL0pZJz20HvPGbkMseVCQmnSUPeS4c/rt1XvYPxa7XQHv\nZMMUCTjM6sQWaDobVoCh9pBgTxsHEA0DKaPW714j11Sy+94F5A2JCrxtNiGe\ns/QfJiaTYCvWdqBDg/2nwqRPxkBimhEykrwzIQdVeIUD8IA1gT7taYBXW97+\nHoXl\r\n=NWHw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF8GVDs9EmTIwif3TsdC0dni5yYJpfV6J3HNsDPQSOmKAiEAgto8ERxrmxh10z5adE0M6EIFOHm8IhWnKSSedug9PcA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.7_1574131432740_0.4186123081670916"},"_hasShrinkwrap":false},"0.11.19-alpha.8":{"name":"@react-ssr/core","version":"0.11.19-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"aca07ff76c6840aeffc7c4dbabcbe822270b0525","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.8","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-3Bo/poGORcTbBk4LqXHRxsaOMI1DTkLh9xHjcaVD8o8tKl6o1uWdog+8TZqneKkL70QQXcNuF3U5V/G1XdkL3A==","shasum":"461b1263d6d881f0798b3831d820f7f89a19bfff","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.8.tgz","fileCount":25,"unpackedSize":48078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01dECRA9TVsSAnZWagAAntIQAI1n0/VOQN9dDiNSezMm\n7ui1O1RgE/LB+kspkSPUpblWsPXR3qViWJrp4Pi6sKY4dQL41iW1r9ZqhzsD\nzuxOloa5OdOWe2QftLL5Qoien1z8atkwM8ymkNwxdo3nvD0k/Qx08oaYcpXh\nUWwzsBRIKwmQG8SPh65vlnGPrGSIbROPN4DDRPU+5NOvUdL9vcxgWNfE/h/O\nfAfgQNRgoG2y7Ip/v3mHIeooQwYRnMhT1S2q58wGVuciaJSHazngg6H7QS/+\n/RdhI998RFT8dME+L5SM7MLSPI6ZIkEV30ScGg6SJZxaGBT5IeZQYPUn/PlQ\n7OWXfdmlQvia2vH64STLYuj+8SqNIKDMWprxFDheeWFUfmCSu0H1LiYFlo07\nFBtxOuAL5YTYH/a0Cjw9okIH+2pJbWTi4uOjgaO12thERAxdJjFBglkEd9YL\npNF4lYnNxvXLH0jHXUSDmG+Dd9h3TRLutwABHpcgGNqMoox9XSwVSTJsjFS6\nN8CNN4EyEJe8jgRtFKcgLX2H/CUaeb6dEZVaHR/hzlJjsbzz0Q1m2KphRTrR\n4HUuR1l4Oco7iTOt0MfDWAolTa+ntnNJArkvb0w6ialzpVmyzY+er5GapreY\n5JgwlDz76VZvucNRmM7P6l6w9HI5t+9iK+rxS3/yOrBzWA+KGulKB4MJyn+H\nhHOV\r\n=wBK1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFab8lAvPlel2T8Y4QeMntbJVIo+VrbzH+Ugc/Uh0oeBAiBHFZXpp961k8q5ScwaRcF5RBv9m0UBwjD9IpRYwhG4Ow=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.8_1574131524343_0.8816686222038808"},"_hasShrinkwrap":false},"0.11.19-alpha.9":{"name":"@react-ssr/core","version":"0.11.19-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f608f1e61d4cba46b5e7550084979fcf6670d10c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.9","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-2/Wubo6O3A6jHNXCPrgFe9IXsATWCq0fZ7rmdh0FLtCeQFTJYT+obgsvsArTbn3gHptWGimSivlIPr2/bVEsWg==","shasum":"baf8c0adb12ec3ea216b3197f6328c2ee85a374d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.9.tgz","fileCount":25,"unpackedSize":47982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01e6CRA9TVsSAnZWagAAgVIP/Rn/0JBGTQRDp4xXvXjV\nIf1YDdyGb3tloLe9M8pJveUEQr+y4IiqgM2eX5ZWPmYqMk1wpzOgZTWy8Wv8\ndZTkusCcTYY64TgbRzmS7fg3/enAOyo0TA4lC0xKsiKERfhywvYZ8/UM7d+a\nUPuFlX7Ksor15Gm6Ekf/NozzwVKvuSIsLL39kbEqhxJeMBezWuLBpdZ7jx3Z\ndjDdKAuHEBTA8seNaqUnYa/18VvbwJVc2yUEoW4QD5HwfM60f0hscfamYb4l\n+H3gr9phB8zswZoTg7+fODVE92k1K9N4j0oJFvWs5Rmf64z7nQCJubhNWazf\nVDdqLU/38P3f8CTeUiQ80BZRE3TB1v2MRQ8zqv/0oX+x/gVXSPbGle/kQOqm\nc4GyWxpQb1RamxioBQlh9n0+1vw3uSg7jPGm8JIGh86VnzweLZ2qSO4+ry7t\nHzLTk01nOhZiWIN/c8fN6gQKUAVX2PaDpedsjapRqRvYX+UuO76N9Fy5+bFD\n1pmUTpWAVDuRqQpe5YmJvjFT7BiqKhUysQXNVWPr5DGeuXQ+NNsaf7LS/ZwE\nTJMwoiwjPO10nddwfNYduZ4UDx45Hgb0anBtj0cfHlDh9GfJOvazL7zOrgvB\nKtul54lamjeMoNySotlhFsryIrQ8piHlAvld1BbdCLt9AFUrFWvR/VEB8QpR\n34hp\r\n=dJpM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9hpqY/jtiiJLTrHMoX5uu3ZJXnLkx/LhUqnTQmVsB6gIgdTeNubV7VP6Tz6RkozNm+SfXu+0doF6jIFDecEcmzgY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.9_1574131641581_0.14690157776116108"},"_hasShrinkwrap":false},"0.11.19-alpha.10":{"name":"@react-ssr/core","version":"0.11.19-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8680958215d44337f31ad2c8041394c35f4b5559","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.10","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-mOoljl7sJUdCTDKILap8Fjp245Uo5FcuiBFkSwjiLLdmi/UrMh224OTOmxyhiU2NsMzVH2cXt2U/Hhu0nc4xiQ==","shasum":"bf66d9e4fcb8aa6973a78f10d8f0cecff3bb6087","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.10.tgz","fileCount":25,"unpackedSize":47985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01gqCRA9TVsSAnZWagAA7OIP/RYtXLDievBTi+rmB5i/\nJMBTzqhUWiYNfVZ+8vxEVGeX1TcljdXKlJ3qA6HbNM65ZSfBR2Oddd1+egNu\nKzeP7XdUkKM7o6EXU8YQmltyJ307xj9TzV2yuiSScrFD0QQaj65R7LghxNTt\nQnHmYwHSqYLav3FgJH/y4RzLCn1kbu+HEjs4o7/SOCf9cFh0GGc6VJKI74x0\nJtt5nguNIv6n83YJyBqrBWj+1jn5qB0W4PFSWjd86WRuVlxVlgOcHicTZU2d\nXHdUFZHH37J0iDfLPH0EqR2qk0FldRzWGJVaKwkSDcE14HRVD83Yo7e3aYaS\nRzdVYUbTg+fZ5eiOoaHUVWTZoDSHP3YB6wDYZZ/AxW9zgw8C2232TyfrdtmD\nPU2NLcarmvXhabCQY9Eks8r6J7fTFmqyUQnF+KS/4IlrnIEmuPaJicDZLXbr\nIAivQ0kmSC6hWg4NvKLtSmUe5xvBEgLfEkt7lUuEMoLZ63gc3O1U7cKi5kem\nqM6H7LBedpEllihRInXLAYac6KZocNfFVESFpOO6zsn5W+TkvzKAPfduINsM\n+bXrJcxF3jZ+Y/rCYVuttK2HlsNg78niaCYqilBuwCwG+TyXaIQLjdaMLjnT\nGSbQNqh256FcnA8h+xlpE8e3lX54QiyTq+QnOguzFI7LRoj4ZkVHOOIA3hWo\nOtL9\r\n=mxvK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDa32hBnnjqvpiWKwQmPIZ3w/uPHOVVB9sVWju1Mo4sbAiBCc0bOfolq9d29c6EmQC6w6h3ar1Q8MstsRO66JzHveQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.10_1574131754189_0.9714885561316025"},"_hasShrinkwrap":false},"0.11.19-alpha.11":{"name":"@react-ssr/core","version":"0.11.19-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"20bc0b48b97e8357ed5dae4dadee2c5c70910084","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.11","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-ufMI3OdFTBX+3IevWakmwWKf2E6M5pqJhXoLnHK61paDaH1uW6LkBnuCAgXnuhGWGYXeaJu5E+NR+Nl/TGQlKQ==","shasum":"610ff2af4a45b75351cbe5487a264c19d0dda6f4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.11.tgz","fileCount":25,"unpackedSize":48067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01kdCRA9TVsSAnZWagAAOPcP/A/xRwbur9YHOkDeUmLl\nmoMULsYueq3UptxuLstxLbrwnptWkZ6FX3wlduig6GnZz/R5jxAigIFfPss4\nMzksdvBiMNDo1yci95t5SSErm5EG2DrT4ptuTq1hx1AMAJDtCu1sXRQwXFen\n9i64DGdikJgCHP6rTDXrFqW+eFtIY32rnH334scjaFUTWbwVRcDZ6sRnSlP2\nOxQXcCJHCoTilyakv7YhC/D3lI4P6DUFPkmeEySmaCvB999Y/JYu4apduXof\nqZNdJB5kYY6JRMTpgGAunyRz89fIVhraW+rAbB/hDVFoUKFSqd3LYUXsJdJa\nL6RjNgubb6XsSZny2zL5rfC6rMzPkv48Z0tnv3+eubPUORX9hcmUXwmd2pAN\nEA5vLX3CPKTOmF0GDxuKmKKrxkHcu6s34jpkSaUAsrBUhZtf9qG3+g5njEAP\nzm9glPKLu71c2j5gsWYaanteAgyQIDo/SwftTIl1uSlpv5Rk6RUwDmbJelpk\nQUEJdFso0pcrrjIopG8UJu7/Cp9jinzfOJd92tN+ppUeE2kOWdwRP6I8wQ+B\nBuf90YhDW23cXhEPwyTKbUDfdz4I4Da7bp4PG5CnZW26Tn5ciABjuouhIsZL\nVzAyKJ1VyUCM+2aavUhxrCoMMog7aSAe1TsYtw8TsdXFQIbMX5Rxbq/K1lTX\nnE5n\r\n=+lrb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFR3lDRpveQdfhUgKSEac8yokRau7C13KwfEn1pmMclpAiEAnjdnj2uH0BDAM4wZ4nBQG6rWax0mwASJ7JmjnlXsTws="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.11_1574131997431_0.44170943621321945"},"_hasShrinkwrap":false},"0.11.19-alpha.12":{"name":"@react-ssr/core","version":"0.11.19-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"43f3ad4afabef580b8cf20905b1881c4e9ce0dce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.12","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-VnI73k6JLyna7BtqTT7klzl9ip+aKaicgfbK/QpeR9CGBSqJngTy3+YHmsnu6QYpcNEcsKYewxooEV9Zy1IZPQ==","shasum":"e5bf1b99570eb7bb216bf9c85b1e42cf284c66e3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.12.tgz","fileCount":25,"unpackedSize":47971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01ndCRA9TVsSAnZWagAAXOgP/RU0zh+r4egeirhzoDta\nOYGp/XqGkKO4igNjY74f4p3QnBXFFHKfi/WA0ZeAXf1pu4OZYG1jTu853LkW\nObroLur2Bd9y8HPPFaAVpcuqG3NCKzNQF4Q5uqjC7nJ/ZdkOiDHy6lnh9QPU\nYQd6ULnxyLzClh5Pc4bLr8jn0qNYr++ygPf2M6n+9yWuL2lJUwMU0ygwYxc+\n1324Pu08udBEZqWdV+xMTUY6p7/h3oO3bPWNrUpaDHb07r14DPlb22Ip+BJ+\nWIfdVINe4+58H3nCetjd3EHhdTtkomnzzcX//qvXtWM2DsI3qNHjmjIzekgG\nzSBJ+FJB6BfXL+dM4OKAQh0rYPPr96unvcWcAALoMRndZpHXtWx4Zyo6dCiG\nP++a+EB7uFhUr9M+WvM/O/BiZOs2CGOiF93NH6tQ0WH7fI23TVy1RsUyN4bQ\nUl95QFzVe+y+ZTEEYKycNU5XeN8Q/o7PsAhfyjFv/xGfzROTDlGyuP01hMfL\nsHMnyXgLfV0nHZ8ZdLVPgoTdgjPtCfqNz/T8GYMGfC2Rcjz6LYmdBTr7XvTB\ntutxqrU6xJi1HjLQ/0ba3nRoTZdYEDO/4OrInwkr4nykYpgn59TNVYmMYBwO\nP52bW9V4QpbTDtGxeJmI/jzmVsn88LqbKOItlLkR1H/gJICiniZ/nvEGJmUp\nnWD0\r\n=Uz8G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9Jyqf9nNb80CpzdWm0ITFJEgli4qlBznBmVb+CzrHFQIgU6BARuhvTbRV9U8lH+L9O/W+qd+CpccGXXqrLQPG3gA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.12_1574132188638_0.4207569288775801"},"_hasShrinkwrap":false},"0.11.19-alpha.13":{"name":"@react-ssr/core","version":"0.11.19-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e115955f99561edfe1f52900381a2872ec80095a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.13","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-qqW9Ia55KE6++lWOFhYZCx24Guf7f25uEBEdEP/zvVHpfO4rZ0wxVQCRVuQ8/7o+/t1i7RZ/z6metAvsmdUioQ==","shasum":"26c60cc6b2d6539bfbd82af84694b9638aecac31","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.13.tgz","fileCount":25,"unpackedSize":47986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01qsCRA9TVsSAnZWagAAXZsP/RIae9+UhHFDSPwrjvgZ\nWwPEaDgcUQNpXWpFht3pFX7nr7Qj8WZnuJItYXONocMB24KwRt2xejFfs2bs\nWFXY2nqWVWeYDAonvbdK+jS9FQMkmxLYzmNktAyQjcZ7ZjRJA9czVQemXNMt\nN1yarzPX1F/TaZXTs7C+VQAQc8DzJBT36BXteHsqCYgawWVmgW1Zd0eoCCLL\ngyumPp4zvYtyqk9QRbi+pmKL6plLxEBmEiwujY34QbpnJAoH3JiNhXfIKsti\n8/LYGQ07HfT4Xlbo0RuCgRS98jlegYpNx4Qg/NKhFqDWKAMJ2gHq9OUwWvRa\nQ/TmAZZ025B25I1+iWJv8veQsEhAKhqpKjpPjZVHP7YNw/z/lrADcKRDlecY\np3sHUPmt1Lj34wwWtNFvaRyT41rZgCXBpWTuc9FAeHNtNqSo/bH0L60Xp0qN\nUXfhYrNuWMwgLA8B2X5lM6W2pg+tuyLiqqdlnTw5qfAu1ZiMlvyecoOWxdKM\nsk52y23oed256NCkXCUUV3agcTHRx4my1LHZd9TB3HkkQOEgfnsxkbsSyAPd\n+65HFtYQienL+seSvsxMwVjNCCKYXGXE+k420unPQnFTmrplWKzDd+Pu6VnF\nXiCC1AUNC8Ff2+ZHspJN3DHGanWVuT/qIvD2lk19QykaXCK20k3eTDRV54i7\nwegT\r\n=SFha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyQv/D+Ip+dg/F//DPkhhddlgJmT/As1BDkb1Qt6vA6AiEAkUtJkiZr3i5qdRWFix19SwbqgXnWhQbEdHaPR0Rs9eA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.13_1574132396546_0.08208045505252248"},"_hasShrinkwrap":false},"0.11.19-alpha.14":{"name":"@react-ssr/core","version":"0.11.19-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9038a0754970bef62e7280d77bf8252c2bf1b19e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.19-alpha.14","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.18.4/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-E5vrGPy3ypH4f7pXNKL3ysuWLpVDu8ifbQdCO9ZMSvMHcFGTKLYnspeT6l+L1vx1rjYrEYtAmLG3dnTfMC8k/Q==","shasum":"0f87f852afa3e3c8ecb69c88b8400974a9fc8f80","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19-alpha.14.tgz","fileCount":25,"unpackedSize":48055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd01siCRA9TVsSAnZWagAAIQYP/Ap5h5qY2iKM517w41i6\nUXC/PJk4fkKLOS4DfCrlV4ONi6qEtlWyl9pCFRzzouLnNcXDBumlRkMaad9J\ncDhu+GHAukrwbsAQT4MsPs4JhgqMpxE8TT96Wb/Rtk/uIXPmWo95tx9n1Jo/\nIMmZNXqRyvloPzL7WAeHDbmtK81pVTZIEky+cTfR80ZgEyMBaO7xEpaMzbaQ\nBroZtghmCQedDr3JcM85+l9BvJIyKm1yp6Hek2wlUZ9nGkzxR5Wo9C4mppzE\nYiNd9A+rqa86q3wqRxdu5L6dcLm0xURamw2S6lBoDNelrxE1YnJc7rnixSVv\n6zEWQs9Q630Wx7p9m5PhwqBi8PAedTTXB/ILiOzJH4LyTHHA3yT7WCMSQNZr\ndY5HrYcwAL1tyS1ZwTECvIdXzglZ2mmeQDKneA29ds2avZaXmC6liFNNFJ11\nW5JSa77fNWw1FfH2N+J3T1c9JUxxg0tqTECKZ0NyVYQiDuzxlidv2AEbIf27\nLDw2/QT/+Uh93SGFRXeRgWsI3cox9Ibe++qf9h2cJZUjTZ0tRy8ycCjTb+5g\ncc8xVf6a9tFAPZLPpxmpgAVVJXL4Ca4YUDuqD/vCcMI7nf9jRI0NIJ5N8i7Z\nx7JC/mqCwxP+SavOku3OZQtESgTvks3FH2on6fevTkttXfOzmWVneL8JkGf0\nfKlQ\r\n=g7ja\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwEexe9ZDk4y2Gg3LJHzPj326qtS9vCCnmCXOSmsX8VAiEA4CN5E4qmt5byq1qxEVJgBy31ldXxmc9v4Wieb/x4WJk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19-alpha.14_1574132513980_0.8328366272183936"},"_hasShrinkwrap":false},"0.11.19":{"name":"@react-ssr/core","version":"0.11.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"24f56aa3fea5a9ad02a1f7c2a09c221809bac1d2","_id":"@react-ssr/core@0.11.19","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.19.0/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-eh7NztOmIe0+I0ki8iogB57sl0XNzikNZTiJ40U/wldUEvyi1Kb6o9snVmnoNnt0MQkJmJ6Ocojbq7/XP7Emcg==","shasum":"beb833515c1d7eb2d9c315b8bc98dc7346ecaad4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.19.tgz","fileCount":25,"unpackedSize":48055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1zdxCRA9TVsSAnZWagAAY5IP+gLF8J/mebzFGR//xTvo\nrK+TtP7LMJ1dBiAUcquHQObuwsc7XacY1c/RXXw/D+0OLnHHUdV0HVg+yR1J\nY3IpDqxWNdTsCca6c742xZtnMA/2rWejhWFenEdDG9HWcaeagVxfhr9+of7S\nrvgfnbn2VKJi8sFCSoUKLX0oZx/hf+KIzGZqpHrIyDp7pt1xf20OAevE1ch5\nfA25uGOky6VzyI68+DIajzm0pbwvJGo51DaPSw9yJM54r2//E+mQtXyO0R9I\nHaVzvlBqTkrWZyvwff0++poexoh2AarsAhD0sw1TqWqh0mIOqUGFd7UgjlPn\nh29ULPWV1I3zILNGWiae2S5JxwGUqsuOk05hDR/+S5qtSTkYwiOu0+mPDS8Q\n8hELO/o7X1MQynogBE3QxhFZWAIEXFcvMdcM0p6oK+7jAEfb7hxhXnAoCsiU\neG9YBkEvUPSineknrIW2t63mmUVCw1HxH7cd8rOpd00Vu0Te7TbI1WmPc6O9\nreZZM0QgNihb6FvNVvXfBJiS+Yyvqrs7cgtw74jDo5WM5Us4R+eqtsSVXmPi\nZoQRJGM6gd1KIaPMKlAsA61Sj4zfABivRJIsuLSDm2eKxbZZGS9cdLxhVIlO\nyltOvV9Sj7/k8GPxlURn3Np+iOFX4cssLNWJ/QTWe0GjJLjPVriBKL0pgdoD\nW3AH\r\n=zWso\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFjvtkVme4mT2cx9W5Ecmxp+jPMRrrgTzOo5cS5MgXHwIhAK3f34K2jFsH13YtV3GBGpIPwMLCGfOiKB8xv/0eUkfK"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.19_1574385521002_0.4456116540219066"},"_hasShrinkwrap":false},"0.11.20-alpha.2":{"name":"@react-ssr/core","version":"0.11.20-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ce9930210ac88543b4a147ce01858b89d942cf81","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@react-ssr/core.svg\" alt=\"Package License (MIT)\">\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.11.20-alpha.2","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.19.0/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-rgQF7yakFDQXXPIA/FsayWTC0OM95OgR8GPLzA6IIR48G+rJN2/FlZakI7uDjQcOVQhljFw6SauydDBChku3rw==","shasum":"b4451300d524498578975a4972d03cfbfb955320","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.11.20-alpha.2.tgz","fileCount":25,"unpackedSize":48566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd13HECRA9TVsSAnZWagAA1lEP/0YbDBA90ZcEkoYempUk\n1IERZU/EeUrjkPCzKUG7omsB8l4jX4lJhUjH+/SBHbQo9z95mEUWmkzK5fLP\nRkdgXwOOMdctTPpVWB/gyR5VmBuiW89sMlxBQp83Gndq8HXt0QwjQBWFdMz+\nMMwaZ5VoST50c9JSZVFyApfAChaB+hJQWD+Q+sqpqU6SMwvEP5oJbVizLGmr\n8NE+a3DmIaag+vf6kzB1+ULSpZMLJfTp6u1RE6zwF+62yceUxfdOzZXJJ1Ks\nXUZDAloiH/zaQI2icZHO5o61/ZDdAxN4+giKS1Vo+Dr39MvwkUVzjJR4Mmxx\n9W7Wg4Dh/kUcB5cvAibp3Xxm63oreepoUINiIItgoqR3YP3gjB9we2iHAUji\na35kcAvPCMKcLORU79rFvHoKqylQh+9S1nM6h7GB/KttwS1qtx2WihhnIMFd\nCHAB4yQZ82yxHcRbFzI0W6cCxoJN0uU+SIYJUDD9p4m4cXOMD1Cn2ELlPhca\nj0POcpNa2pbXhBgQ3wnHX0M8rNuuLGQWG0Fn1heceZeDhgUjJQvOynlzqcwe\n0Vw2H/kLp1ck5qBOaClLpX26ufAFzrjOvBHYEJ30e8V6ng82uCZjvT0DQ2gp\nii21yfpJaCNiT6zVAVqBsw/69sRhot1jrQ02hZxrPZSX9vfORdir4J6a0+CY\nmVIG\r\n=UmOj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu6fWcJX2a4h3Htxwt17l9J3h8rFps+sHH82iMqB8/eQIgT1OVG9UhDU+6+CxkxI8R3vGTNGgFIrVtJjB9hTmI+S4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.11.20-alpha.2_1574400452413_0.7720672211713302"},"_hasShrinkwrap":false},"0.12.0":{"name":"@react-ssr/core","version":"0.12.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"17d2cb9cf7c496900252700c08b9843b5e728d3d","_id":"@react-ssr/core@0.12.0","_nodeVersion":"13.1.0","_npmVersion":"lerna/3.19.0/node@v13.1.0+x64 (darwin)","dist":{"integrity":"sha512-TdFARpFiGf9tik4NeqoDC4J7jD2aKw4qity5Je7b/NMMcvrgk/9UYtgycM34MKwcoCdvMmtHZ4yrOXq6v+SzhA==","shasum":"57fc96ef2f3aaacd805fdf30591366e84722e6d4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.0.tgz","fileCount":25,"unpackedSize":48549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd13gPCRA9TVsSAnZWagAAiWwQAJ/yAWmv3g9UcJBeeFZh\nC91yTKWWFJrR3h7Z0FYodcOwgGbKYokPleZHeS0u3NlkIkMnngr5Fkgbui9r\nmi5c5PuDxEnbdtaxWB/TW+x1NcRENtF6Q3VB9yaN/ytQzB0EoGGhLoBETayC\njy5jKXbcY1n4JH6Wivsx3Z+nmAUYBgj0h8PBsQcvYLb7vHXFEAFySerWTxQg\nQXcT5vb7ev0FZ4VrfWowUh0OwYZxGzbytUOtjF5Aeac4on4SYkHk/pycDBf7\nOAT/GTRUbYjm8lGkwmc4MjBfkXWMc66t+JXCvLHLW/ygmS7s6pkaEWV3hu+3\n5birlRHQsb0QaPwMcAM7rYfmnaIMH80hCo9yvBId1On3pGzl0rdjZeXHUkoj\no257Qbm78vBqX0jfk1nQ2Z5OP+QoSd+4Zpa1ZmEAmdu9/iG1QwfadxIYbxGF\n93UwPi5QcZw0QgtUJveI628IM2bQ0VBeB+3rD/S5lC2tIBkyYEGwUCuxplvm\n67kPzJJGGP2JcBZ8IbZxBo6y+tSfEKqtp7n0GUOHWxYWCwwT1DruRhb9sM6w\nAQMXwZ32tb9pkwnmBGlHKeTQvGMmW3W8Rrv1AtjsY3bCDfEWRhR4eR9f2kbp\nB2hjQIEb63Nri1b0MU0LehsnM8oeDYi2QQZ4zDsq9QZTY3vily0kkfUaKLN5\nAlor\r\n=XU5m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGmS9s1Zo7DcXB6KnwaokF/9a5h0J5iuNpPQyiELD1znAiEAx3dC628zKVL1MA6TEgZZp5jSatzNqQ8DiKHDYPW1TaY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.0_1574402063057_0.19023889765918667"},"_hasShrinkwrap":false},"0.12.1":{"name":"@react-ssr/core","version":"0.12.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/register":"^7.7.0","@babel/runtime":"^7.7.2","@babel/runtime-corejs3":"^7.7.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8553f17c2aa5f2a451cd804c247dc41d6143fc0e","_id":"@react-ssr/core@0.12.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-hFvmxHJFfl4uYbcuQwa3/zELnbYNRDz0AwpRvU9DDTK27WtoEK5Zj3A6LkkSrxXF9XGVAdLLgt8nN3Ah4VBYGQ==","shasum":"e204b598ff0e4096f2391d5c2fc1bd9f33e4aa4a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.1.tgz","fileCount":25,"unpackedSize":48458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd2u8yCRA9TVsSAnZWagAATwEP/R3R6mX9UUd5qMkeHr8V\nduQ2r0DL2Zt3XRomwCyqu4f6Y7Q9Ik66uHxag0Bi35oSkQ7dWbzoEL0ryPop\nenG8bsJyEWeOR6AdslH9vCftpfiPd97yOHs9YWOSSfXyiqVauL7ZA3oZWECO\ndVLmQL89N9uoxeywl0uJ00B7mC7+OIJS+Zay9l8GlDeDl9Vbea7aSIK2puUj\nI/SlhWz2vHoHWFZV5UKvAJxENt6dpn4g8cHyk1EYwy1IjRWxiLU/gn4p8nQR\nk9viKY+ULQTUlFVM8IyH37C8vt6f03+cStIiWof90IEJFp1FL3UeLvQ0gN2X\nIt3j5k8dcfUBNh/2xXdMRy+kcGxgmb6Zzwavg/j0/eteVOMG3SKsQa009KS7\nRAhAqo3VQbRrdPSLtWkZt2SZM7ggx9aKHtQfmBnHuZ+Q85CZFH+k/uq5XrLa\nh/6NSvQ+9dRJq5igt6QnKgRe+N1JyXwCx3M7dtfA+qexQ0SVZAjpG7XjSe+m\nEWs78sJoqRLZxgPvivsKTdHts+thBFmvpxyx6wmJXLzvl/RmKAl7SLB+umlD\nsU+ccyQa9rxc7tX8Fwc7borztFPxF07pyRIwdHstEbx5yOK1ubKX+02SZxGo\nx3gh6PN7titaMf/cM+z3nPDgMspLDDi8YAlh2WV1s7fiXsoXVfF+G3jQQWyc\nZ0+Z\r\n=0iO5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2j/gaZDxzzxRutMQ3lLqfKq0Rj+NSssGm9XeGZZ9U7AiAFxx32a7fnLDYeGEpl21kt2UgBdRSZOAIjXxTmHFRjQA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.1_1574629170037_0.47578079597785394"},"_hasShrinkwrap":false},"0.12.2":{"name":"@react-ssr/core","version":"0.12.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"708a19f7c3f578b58ebcde4491be179c6641050e","_id":"@react-ssr/core@0.12.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-8pRZDX/3OWRkP33tWiNqQtqfOoejtgrEJSnMJeb++wBBO9I9xlPzRmodmSpkA5+eYpysz0DTOQ95NFvxduCyuw==","shasum":"0df3809b9eb41ff40f9a9de53c6bc00ca7c38f18","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.2.tgz","fileCount":25,"unpackedSize":48458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd25hTCRA9TVsSAnZWagAAV7UP/1S/3suzm9S78qKQ5we2\naUIxljKCMWZM88AUQuI+XmBkuD8ec18GKM51phjDud+d6soawCnO/OR22Pch\n9swfAKzrX1EofUl/LKg4hjwuB2g8jXBuMmam5AydqvqXD+fVMeh8qPq0xQ/a\nR22ia65NaD5eyq3qBiMMxqDzOzObEFcnRlgKoOqxHQ/M8GWBBenm0DjQ9bne\nrMIEqo173hKv9/H7eWq7rfGxKykB4dK2sKuTvQpbLNpSBCpWYXGkHf49juOx\niZZ0dm9k3CCcsHrQG53ghUc2VdnGvdCn8UctsVvNJGDQRxn06h4m7O2w27Bm\nJq+LjVwz4LgDyanbVeFtEYTNcq4uyZrKdD/KhEohT9S+m19tN1PyhTsV7U0x\nHnz5+uIKy3X7K92preEXubGn1jNle7VkNMqCxXwQcA8RQ8ImGxjQSt1iuzMc\nDXkNRhBFCB572cg8xNPl8CEN3aVHIyY1uBOZuKC8YC3S9WXulYapRZPpd2Vr\nE+8DeiqcNcQAL+roqdjazPSrNQQsQGacfPQM4iWZBEBN+A8uRdOyP4SnDRZ+\naehTTP2vgTm3MP4w4dlqVDJi7rtlbmE8X1LXp0unfMSzzOoxBzwet8H3IX5J\nPnNKUhuSb39UuihTtFoQ2H0EijE7FmoJ7Q3mp3PGwsbUHu90snc2NO+9i19d\nwU9h\r\n=fwz6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAuuAnJ5aTbK1TxnyKZyB4IOI39aDY3Ekee48F/A1qTLAiAwDX6DzD02h2Se0ggr7wkcQmAFCCq7mxSdtYgSVXlz2Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.2_1574672467319_0.8426759324346802"},"_hasShrinkwrap":false},"0.12.3-alpha.0":{"name":"@react-ssr/core","version":"0.12.3-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","json-url":"^2.5.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4fde23fb0bf5c12a847e43e9748f1c621af3cf3a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.12.3-alpha.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-D/GZRqVjMmz15cWPBEZ++i7pfZCZbN9WUETaaqkTJGs+tbhgzX21yp7MbsXE+2/2HAt14zcrVlDzgbU79BVVQA==","shasum":"1518b985b849d76e4620e9e6de073e7b0cbf851f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.3-alpha.0.tgz","fileCount":25,"unpackedSize":48489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4LQACRA9TVsSAnZWagAA/EcQAKPt9LIeH+ZnYUZPIhEP\n2jnJqJywnCAtvh2R0L/LW7X9TjjM4IC0M2XG+ORlpCIORtqKeh9UVsTIs61y\n0sgqpY7057UKZMj6APEmLMiBS55EYyHXA7QV2o4i35VA15bZBdL9aUWIgRUA\n0QYKFFsj7WkmMd1Pk17psv2Ah1WsZF6zRzTyKoWkApoqQGDNWmIbrSuiZ/AY\nTXWBcpd3ItyshpP2eTe/GjPdT6Gkbe4QBqXjN4Barm2aZLA6fJm5mqZp+W+Q\nSGFAFmWK3WeLRRviJbMY5KymIpLM/JdHUfUAhkTysd0S8YeqQ4+3WorRE6iJ\nHDvoZsF8mUbirgnMHF3ArtdeEBYIg+CqveyNXFAkPdliFXz556wVDousiJPA\nAQjDCSeDHsAwaMsThF5EqvEKBaYCjhn+IJcloG+5Y6t0iD2ZtFJHC9ojnsb+\nGicZBjko7J57Qe7WwEf9y78AXDeSJMnnaMMuJRQ8dSThnCvhO/1Yr0TxZuqX\nUwOCLLLot6GUoGbJnYf0PvKkd2oos38fwBuZ0Vnl5cHTOAihxKplx1uW0jKE\ndzAvEpXNkeqTjGvqNH2ISGKVbOohJvrOC/DL6PsJdehos2iz7JUYktrkXlot\nU+RnhfC6ar2AP4FFQChwmlJM/kFR84urnX7eJE9CHOmxzIVzQHmAR7992qtb\nrp4m\r\n=A4lZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtGDZ/gCdUO/MvXb8Q1kBbIhn7PxKtXmS6p4mB4s9FEAIgQtO8ivAKyMO/tZNFN6pCjeKDP2krZu3SCyNvW4soBYA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.3-alpha.0_1575007232300_0.635888251769051"},"_hasShrinkwrap":false},"0.12.3-alpha.1":{"name":"@react-ssr/core","version":"0.12.3-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"33da0089dcb5e4c1eb3b8648f3ae5848bee03157","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.12.3-alpha.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-CD/5kQTQeNXe/7wIBN1wH8jl2UYwpMUjzpbF31khplMF3ty5xfknm5XDFtjvQIKgoJ35A4OkjfkhME3fHcTL1w==","shasum":"782d50074bfddce16fc61cf4fef03230d43f2f4b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.3-alpha.1.tgz","fileCount":25,"unpackedSize":48260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4LkbCRA9TVsSAnZWagAAmZkP/iXqIqlJA4q7/iAd7PLk\nTzt07huLW/KEE2xF2eDq8DWgjl4SZpSn6zK+IIFdeF1iiqkPbpCYlgp6QG3m\n3Ie9vr3f0dus3Msj2G+hdmsDBubvTxoX3+MYEIqsyudD95ro/6BKLiH77zkc\nY/WXC9XIiOtyUhoAmTkORZE4wuLxchJ8s5hdlrcEj1SqEB30cP0XPQKHbA8U\nf9A894eK94U2DmR3/wqVk125aENQaf9pZiiBqsSZN/vGIbJAqhy/PWKW5mgx\nXVlQv+yUs6q0lIq6ijwaPwM7DUNfnV44EunVgHDCSVuMZIbcExRwo7W6FoBJ\nwByMKWps3j4A7+9bcj0uPu4GWHJnAgj7a1Fvjnr9eeeAP+eYz59KsiLtEIGm\nMOYtNV45Fqkz0Nxo0gHtQfD3MphMdFdp98116T24FjfJISRD45Emubn9XzCm\n+7vVAEbNQ7Q6KfyeJMtglK1JnwR+MoBmfpmxFijtr/btN4k3fCLy570F3fK0\ny/Xbj4qwaQqq246sL4X+inP7wHSlIr+TnYjbb+3me+sVH8PqQj/djupkfn3e\nm9T0yvQNNkr8X8lOm3k2hynEghssHQZC6Mfo580IvbcST9c0v7T/WXgttwsB\nwr6s7LUJULoySqgIH2uWbRddqw7h+VF2oV8Yi5VmlqB97F4G7o3FWGt2I8ci\nCRUN\r\n=stpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAdlLrUY7HBj8Vp/WoGK+mJTdCMhWAsPKA7HLTNlVERZAiA99aVte2KcIeh8zRcb3Ni5yMJFpWmoJbsoVJInrEyfvw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.3-alpha.1_1575008538687_0.5150263328152505"},"_hasShrinkwrap":false},"0.12.3-alpha.3":{"name":"@react-ssr/core","version":"0.12.3-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","@react-ssr/lz-string":"^0.12.2","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3876734dbeb8b7d481424f1e19eb1dfba2d9a762","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.12.3-alpha.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-gs6oO1v7NkLo3WXKt5paeSE0ouhap9q3+7LNouxxJCjLvo6TrZnOu/8+L2MknwvsReoJsONzWKmkkstJlGjKyQ==","shasum":"e1d3443dcf572804096d7e50910840decbca6039","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.3-alpha.3.tgz","fileCount":25,"unpackedSize":47945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4OetCRA9TVsSAnZWagAAwnwP/01irfgzfIj8dAuh/zdw\n+btSdprkYnXqaei2vTMJNMQSEfk6LlbQLhHWRYg10Gm7cfynbtRq13++7VAP\nWPBb1CG9K/55J++svudPko+a6Z9HJCUSXBVqc85CVUfo/JKZ/C0IBSSncpPT\njaRvLL3GKWlMMz5dK/9iH2UOr6FGA64iT/OakWqXNMXhscwwUbHwn8bX7wmF\np9c4Oa/tr0VN5REpCIb8HV88/nm8qlyNcR9ZuRJTEnCUyEcVj7tBAz0pr538\nsNIxw4wJirhH2Vkk0ilovF/DYFD+xNH9vjgrsYUc6eFL68zw/pPoIUtUEWwz\nJdj5tNE+7O2F6DGRCfjCg4x5HqjMb+H6D8hka0XJECdz3u+yKwoOLoL2N/lK\negDp59ydusGE3z07Xktq9nTcmnDPb5PQCZPxQALL5WXDJgYtZGn0wanOX9vK\nsabZpM6rGp0dyeqpWKRe+pqg7HLLmtYn6nd+xN8Np/6NtTv7GEJgSyOAI7+h\nC5coEuZMBXsfdLJCz1c9vfX6RDz8w1WiCymP1C5ZXb7M1Y0IHvyqHT+oKTU6\nqZo0FYMRgKwvUvBTt/Vep9Vo6ni/GqUPPQMkf128BaTD9nk15EoFJoC5Eq+p\nW0QPdFCI2OjvpxARo0e+reXRwiTPwbsLoLj1Hn6xddfX5rkKAMvt5wpyuW28\nBcpL\r\n=X1+F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKpP2kTj+1bBZPMiD0JUPN1eWCMXy3qWgjuhq/v5/2MwIhAMNJiCDO0SIY+1NG7NuI+y3ASvTKWErvdFzC0U3kjAyE"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.3-alpha.3_1575020461403_0.8623152602125168"},"_hasShrinkwrap":false},"0.12.3":{"name":"@react-ssr/core","version":"0.12.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","@react-ssr/lz-string":"^0.12.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1edf4d37e54d13401e02c32507906d6edf9a12b3","_id":"@react-ssr/core@0.12.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-7UpVC4t0GljAoc+kABxC5QTg1xCETvV0/yCSIVagxAhxt2otAp3n4c7nEzabsGz/b0RKQpAgxfD0Ker43D/Y0Q==","shasum":"d1f65a91791a0604df5b9b60b645d3957f87656a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.3.tgz","fileCount":25,"unpackedSize":47929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4OgYCRA9TVsSAnZWagAAbRsQAJtdTndT7mi8dti77FlJ\nRCawNwUD4gQs7VSUQe3ov8vHbTmu8++WU+mxZw+iBUUyDXlGSS2/es1hB7xb\nJks4tPZjQHMXHe2DX/m5QpB+bKH+71InnIvVHdH24iFoMM1yR6nwvPCRJb51\nRIGJndpAOeR2DeDmeka8Uvn9U4xF2OJ3KUdKBd/yIL5qgErbqoy6DKzcLxBV\npI5uCqxO/ucbb0RuRiFkbCv1H9SzJtBqfdV/aT/Y+22s03LgypmMdLGrRV51\nY3SmTB8qPcEm8KEMGxm/u6gJF+V1xGmSTbRwvkcMZ3YXmpJJyhV4iOcLZ86a\nI3uRihdG+0KnVOW2SHF0gHgP7SeU1+fm2KYunOAS+mTWISZ0c784y77RAem9\nMppm2EzihydIedbaevmWoxba805ZfFBG7QAADvR36e4Sd8JQChvhAUuYgcCa\n+fOVbeo4RCubKV4mFP01ZMuzF7wkCYWOm3L+R8iBFr3Exs7rZBD3Tvm9Ui1e\nt42w6G4UjXCrKJe0+YNsyhCJIkMMSjUrh4xHuzZnwzW85cf/rDuyilEDGOgo\nxBb3gN4ZzB+NlF1MYHrJLftgFQPCCL7HXKOwRYwp0s/b11eJd51mmR95K+HT\nte31aP6LkODVg1lvgTG/XdW5sSDOGtmrMFIhW5eynxG+PtmwsHpSbufaY4eo\nD/eQ\r\n=K2WJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICeUKZ2FQADEM1rAAA6mt5FXS6oHdjpA0mZI9BSJSuApAiAC9JcJVMQBSiCht1ck8OCntwF7jcRc3CL4+iFKw76kQQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.3_1575020567850_0.6635487993986287"},"_hasShrinkwrap":false},"0.12.4-alpha.1":{"name":"@react-ssr/core","version":"0.12.4-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","@react-ssr/lz-string":"^0.12.4-alpha.1+7f03377","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7f03377b5eaa904e00854e83905f5e458c5c33eb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.12.4-alpha.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-WYYgPn1ULBTsXBqDb3MndEfKSVCaYBqM2KMx+Qjt3j6SFuTehAglc13PRiVqbGqifeUJbGLF6CNIFKRE2d6Pow==","shasum":"0736c9f08f2a482c1b20a7cf13843eac7420c98d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.4-alpha.1.tgz","fileCount":27,"unpackedSize":205465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4OoZCRA9TVsSAnZWagAAOoAP/39VPPwDXNpDXoA15SRq\n3uypPtBZvLF4yfHYG/jD+yWeotttfhMDhmr2R8w3ko2jFeV1Pp5UWB3dwQ4p\nN0fGTwHjF1EaLf/3/F+oUBn/9aX0beXENzD4HZnm7jGNA2X8VThLW16SOM1c\njbbE7OpbKMAgBmEOZ5Y9i2Q7oO36h/BkrmZaO7VuYKw1WZ2tSApeYMeswZ0m\nVGPOF3S0Vrn96p6Kwf4Eu2I68ARxhp7FrfXMNzcaUQdRtMDMR1hneWL9/1sW\nWi8Ops5/zM83OjyXorm8sZ+dk+GNsyQDYYZ+lqIigL2vX2RiyqCkP9ktFLkq\nprK/ogsms3wRgRwzZBwjx2WUByxYTEDJDy98cdvQ8/cmPlJQtcLLxQxxZ4CV\nNNtj8+9HptFi6g8z6QFojqOSyOqPLLGbIQttaYmcETDjuN59Rolzmv0Lh42R\n+YSrgaSHL+9YARhMpzRqY2FgpLMQq7AhPco5sIKclKA34q31mxn+sPK+qOC1\n1gtAscZmNsrU2+sCqFmquSWJB/h0qsNzfJqjhmE6Br7ploD0obN9C15lTXtC\nLhR5PzpU/Qxfq9Ub2ikmw3fG9Yo4+gPeMQzvBwxgekt2cd+CaqbnXuvaCPK1\nLzbrFybbQaz0UCm3Tm8ZI3/jCNkDMo6IJsLfpuTRckySlrYWC54+83sqmFdG\nLnlN\r\n=D7m+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKj/u22c29upuDmdkoxz4fKHWUw/B4f/yKnF7ed5YUqAiAPWckmSuHNDmSIC6Cklh8XUreSeDH6LKekD2FGgOp6OQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.4-alpha.1_1575021080592_0.29330261078793685"},"_hasShrinkwrap":false},"0.12.4":{"name":"@react-ssr/core","version":"0.12.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2f15ad8760b94b7eeb7d34db14837ad027b006a4","_id":"@react-ssr/core@0.12.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-BejhpPuRTxxtdKT0hLzkpg/UCc7rqO9HxwFE5zt9exPMxs0m85pky31z9ClXK427ghtw7D0/Bv43vE2kIM2jRQ==","shasum":"e5d5fbe21ec3a9e3acb28bb2c85e7dcb717ce141","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.4.tgz","fileCount":27,"unpackedSize":205741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4OxwCRA9TVsSAnZWagAA8wwQAKM0r3OrFVqxICwjBqsd\ndFUFdI+/qbvHy9iDFaUze89wE+rM2Gz233jIVVn/YrKuPC4PlxwkSNm4UvlB\noJNos5jk2Ss2H15KrFXCGxGkNDMylbLvPoi3DIh7m84F5N6dAsVnbFRXNtNt\n9abt73g6uwznTtolmYyKB3dS6VLa+vKoqtRYTkVs2RhDGaRBNXnX4ee5QW5P\nWh47Sb/PD0+8nSY0/i40oIIFpLOQn+wa5n+zdjsfkC9l12Lt56otCZkCe87S\n7e362CYIyYJ/f70epU4RAXUzPYLmWqPT37IYTTndj4kVHaWw4fvWR5vEwpFT\nc9n3JgRa3XDqCruhXvhEKZGdS9/jI5o5eQ2m9OImppasf/HsTNWTf1Ft4GyL\nPjSo1MxK83tcH1j9afvQKRXXpSWbHP4uYBWUTy4Uitx75YX+/sut5yzDmbX6\nw5OBCK/vPek2duiHpQwRIjG6qpEYuI0Z7CQCb+Kr7PoQzo0iJ32gGJLDDF/h\nWFTRtI4t/RZW+rk2aboPFrAHbwQGw8t8gYDpuc0QVNVoYURSMaYc9vKbCv2J\nuNN8B0Qdz726ZmRDRCorPBqe54GPZRTVS5mNSFN/35gAE2dzFB9fEmyPZ10F\nci7AmYmEdbgOXz+hD564L2ygP8Hhmwa9y5oBUHJKgHxuxLBjP4zX7vuTFA9f\nOtHZ\r\n=qcV9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNmojpXa3C6wmYItyT0P74hM2DKEYbmxPaSQzKlioDYQIhAJjiLoxrLoOl7inEIQ4N2blP7jfAcdXcGYFJRHKkK3Al"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.4_1575021679764_0.9252493103185031"},"_hasShrinkwrap":false},"0.12.5-alpha.1":{"name":"@react-ssr/core","version":"0.12.5-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.14","@types/express":"^4.17.1","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.39.8","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.2"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d01afa16c27fa75f0e52a707d37059963008663d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.12.5-alpha.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-LCbNQNIowczGBw10NfHzOTcuyDzkn1Q200m3hehHg7bpAG0ls4X08mes7AKOhCMEO7uMoBbztTJXvyqW1kxwDQ==","shasum":"5eaf3aafb0115c339c8a05f0913141d96c8709ff","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.12.5-alpha.1.tgz","fileCount":27,"unpackedSize":205868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6HrnCRA9TVsSAnZWagAASPQP/08/HWFLXB7bDT5FtR8h\nDlBAnaA9q32Gpow1V4lAsfVfkCHj429tWoiVjwseIsfripUK6zCZfRYokh9p\nTT4x+jWPDXwE+SmllgIBHXExm7wSR8eQQaoQun/ZqRbYuePmi04ZuH6AVjH7\nHl5KkKay9gmnTJo+wP20Ragq2lIqkZTOCe58JvbVm7AbXv2K6dnUmY7j0uwV\nIS2HGEr4FQ6NkSAms0vjkNvQJS6ra+g3TLbZ3gb3ZHHihcbP8EzCNSK99EYg\nygA0pQj2/ToohIRjCNaTmpqHgYdufrTvDTEpkUAg4FVzR/ODRsAj+JaJFoOE\nwHOosFrkOMYfP2QSEHjxj9Y/3aTZFN5ReNgRUm6cUKpn2cTupS10fhrR05WN\nzcaiGGNajL4PjGK+oM07W+QQwwSXTQbKGQaZxiwCbHYmt8o6YP+2haceLZC2\ngHvVBR3wgYt/AclFNE6FOXIKtLrGslk/Yq2RNp1kKMgITO7IpbFpojM3ObNa\nMIhPrkE1aiTf67rZoiUPx5HSTekWuN1ns5M5X11KpjyFnuNeAQTeMgtKTueJ\nAV2ynB2S26gjwZctOgFWBMwEQgk437mtRS94eTxhBwgBxqUYs9alD9wRGddT\nQeuhGJogL43NS5iWLJcgNq1RbiPmTMTSDGZw+nI0HHChS3nPdNMUM60ztqFp\ne2/K\r\n=dgdQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsviFaWLc1bOnEwOZUIudY+QjVv5nFRyTQXXjuq2pKiAiEAt1kMegEzV7ry1Jha5zynn9e/p5x6o0oBHXpcyz8s210="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.12.5-alpha.1_1575516902847_0.24612970169369697"},"_hasShrinkwrap":false},"0.13.0":{"name":"@react-ssr/core","version":"0.13.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.4","@babel/runtime-corejs3":"^7.7.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e3688489314c9ab9659876cc1ba552736e7ec0d1","_id":"@react-ssr/core@0.13.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-geyFLgxTDkouDZydoZF+OLb6gnOtkGkykkkm+jmSDrXbJ7ygJ6cW8aUH8WVy9fepG2t7p2J1xXqu7xR+nOczrQ==","shasum":"b2343384cca35b7f961d515a3a8717cd8c6e77e8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.0.tgz","fileCount":27,"unpackedSize":205853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6Hy7CRA9TVsSAnZWagAAqBcP/0d4/YrTajembJdinSpP\nkRNoOqlJzuohW1SGtx9yis76hGzPPRAOKfggMM95wlpI37/dyeUZgjK4MD6n\nQ4qrfuVwR1EgcqCOeMsBT/nNu9Tl0R18zj8GqvWNtL5Y8f+96MFPN/Knj9TG\n3iyIWcXBrmerHDkib4qx2qyj2Htm92eV+tMnSb8zBQYUhpmpRetnWWldzrjG\nV1aNbHfvcWADwL7/HuTE7FjBrII/azoVERNi3vrKWrya3f6msy/HYaqSedHc\nC+MhAoq+n3VYiCA7rY9cz6PQB9ore/tmGcD3EWHKyl+yg08uo3dHvbmvokFH\ndLV6HKkz2uPSNnT+YsMKAe9IsRKXgDw5j8zmuZY7bC9Po+seLu9VlO6rEobc\nOYWM836YSCM1k+G+wuh+hWiKpVryk8XwHZim9cCr+3LVeK7rNV76TuyNnNwg\ng3OW/LRPuOCgAkwdlZHZSETQQ2s3ywr4tK49j2X/TkXSPPd6JS6c2rKtwxzX\nNBSelLBX13vobAG2BsvjH+gfbsWaGMeFPiiPQl4piGlVD9yBbsQf7ip9PsBi\noQerVvFe6uha4Q2YtONNQVmvDT/IJ+xwBqQTgK8pgh+jIkW/Cy2MQXwes7IQ\nCfY45su/79cZlcqezSyBzOZ176mpWJ+g4ZmuDdPZGq5oHam5VbyZ0lcmY9kL\ndTQ9\r\n=yrPK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxtCr5cFFfTg6erxora5ZZEkOFnzMSWBOEQrvn+mds4AiEAk1eXecH00uNG3qKmW831lbZ4IQV1SQUebC5gIWmp5kw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.0_1575517370312_0.048589666575903356"},"_hasShrinkwrap":false},"0.13.1-alpha.1":{"name":"@react-ssr/core","version":"0.13.1-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"46233ac5f50f6c0470ee8a93e3dd9e576b43514f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-YAj2i3FY+E7UBWHp8o37z8999z7zLv7+MWNqQS6lowq2ylidBXA7UAOJhfr+IPpfgGNuPkMesqTdpEstYPz4qg==","shasum":"8d52aaff5d36b0eaf5c520bca38e2f107ed95007","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.1.tgz","fileCount":27,"unpackedSize":204931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6stlCRA9TVsSAnZWagAABgoP/jAehoamSRi0ommXuOVy\nEa4qzQhbmgEX6luZTlFJf+JiQJxJk/3jlgjJk1fZQ3wL7uok1tB55KSm6A7R\nmAh+R27p4EOHjI08LCGvEOSzF1xDFEts/63gE4FR3CJ5yJ+Jk+44VTT+UOuL\npfbPX+ojiiSqslND8Cm1Q4jw2O/IfDKEh69MzxlSocJNCKOY4pdpf4OguzPC\n5EHiVCuSPlXl96smJ6CG3Wf6BKsGaHBRxT8ajNWhl/6+Rv1pdeDUii1DFgvy\n+GeJn4DJf15F1KS04Z03oylW87a4pYQOCP/Lh06vK7JAkEs81Jf6+XJsuKpD\nio0imB7/TkYzvz+EvLG/foTYr8CvebBnBT6JnGWl8jcXF4f6sVlN6AiDOQ4S\nn3GgTf57e8P7+yXN3yXcI8/jFptbeM/AQpbol8KxHTJKNZvq4r1jIKhT/cek\nLyWWH5aRcnBLus2eSiorabXTgodDI2ucdggKi7qBFygdCKl8G3KbBNm0RfrL\nMVuRGJJM515TGSGpIqJTiqlrtH4C12Zz224lClmEFJJQgs4UFMMvEwHWyvJl\nIGWxVizD8D6FmwH19mapKaigxzkCV8BB26Vr7HR0da83dC0+t4Xf7tZLoC1y\ngeHofOs6kGNFVlTEYkQLFc8S88lelRhHMGpWRhZJU1dC4KmPOHrNUURUuDFS\njmXt\r\n=clHj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8HobwsBi4KytW3E4vUlYfxyPv/T+Qvs1L5iAoU3DnQQIhAI0HmuTAszACes9YuR+2BmojsUwEZrXMQhClBg6Fv69v"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.1_1575668581103_0.39870235293033507"},"_hasShrinkwrap":false},"0.13.1-alpha.2":{"name":"@react-ssr/core","version":"0.13.1-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e987c2f1a8599ffe1004f1931581f55e4b395002","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-YUKiSajRxwZmtfjXevRttqZmmGx0tMa6jaE1tUCLPP3r7EJYtWfvh89kFfVpbKzqaj4b19xoUOl4bisaKaCQMQ==","shasum":"f8bbf22695d42f480fb9e6e2b1115e0a77832c31","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.2.tgz","fileCount":27,"unpackedSize":204941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6swdCRA9TVsSAnZWagAA3gQP/14aLGB/2lvBvO8jZGzL\n53hkfdLtnYzoJZShawWZeoSMx6YYWLRAX4ppgTHUjzSFl+MYKa3SXt/mBo1t\nqz2vjg4kKlFXFtYsRX6dlf+Ko7tZWhk+v6AXYqgHQ7zlpG5gCBPzKWK2sFRI\n2+p8UZMaQ4m3J+NI4wCKJXYkp3TeNKtX65764TS1JLY7Nr2y211GUp1Dt7o6\nDtj/J1sKbpQXVwmIagH0CibizAqcHMHU+lJXqVB0pVutq9PdNdpwCDG6mQcT\nJVmJdme1wbaKSehn1yWdOJozAPPmryrHSzv3lkRSkPp7RuCokukzIANYCw2m\n3T+SGslkzVlgW5++Yh613wUn/Gyt+pIkccC6AxqTRd6tEAgxaDzWtTToMq4F\nwRWMO8ZXhTmPJ9LNp2NQauvMJRIr1I0/sGmwo1V2CDyUKfTfwMjCjC+rwaiD\n2YRJO8EoHCKZTw/r1XyrTWVcT+YlRpfl3z3lhRiQUc3OlxsNjzsw7AHYwifZ\nq6lbPW5kKKWdMSIyHRWbm9F6O1SiBojroDugIfDkznfJf6OjXyYasc2rweHy\n0QRnZ81v2P3wd0JYKtHJdSNAYT6f+S+UbZeHAwC9JTRF5kiY+PTjCqNhE+fm\nmA+1JnSWaZa5+KRpeQOEk3dfgjSsLaxEn1mJ/Cvkv6QDCZD95lx88u3yXPdx\nPKnh\r\n=yZlk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVUP2cJm7JWbKzuihK2HhccFwzsenOdVDErZGnN8G4BAiAr0XF2TCiMqU9BCsD6Hikz0tIYMZ1i2bG7YmCFmrNJig=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.2_1575668764654_0.007427461881156949"},"_hasShrinkwrap":false},"0.13.1-alpha.3":{"name":"@react-ssr/core","version":"0.13.1-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ab9b189da5897b6f8c7f5b01c8abe2425b8ee3fb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-e5ovtUGNWlUDl1fkk7RGDmXovDQhl5nn6tf67Zch28wpUJE+5/ET+vhaEXCRyToFsA/oIhIMzI0+e5PqEBVs3Q==","shasum":"bab59da4cdf1b065f3f31ea775f16fd468bbc82d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.3.tgz","fileCount":27,"unpackedSize":205097,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6s4TCRA9TVsSAnZWagAAd50QAIo7IAc9GT7TQFV14NIQ\nb2HicwCRnIOYmTqYfhbg3SY4jK7IH8zdm6v9GNavLPp0wXPo6CRbaiNk/xEl\nIzZDtp6gXWwYe9VvfkbB9R24pFH0IoQTL5O4IthHZYKzCp9M6Q/A7tCIWWSH\n7uAbYrHHNcSJmgjDnZefRb7d/BTKMQ/koypDMEwCARDXF2kCPeTNzEtJZ7PV\n9yHRSd5LwTBJFC3G64ZepOexhWc/A90IhlhAIhZefLV6CyT2dg/aTrsfCUX9\nhcqTNzFMoNSGu5RNgcndaCPYQQc2CUWan6V9sn6bqiHFhQrKh+wlxjsuAonF\nNSAOO0kW0k0oZzQOGuaOgc2/4XiuGegkj01gkZtpl7BC88XsTupYjh+VbX6J\nOU3xv586H9Fo5Lmpg/8jorpX1I+B1GGNWFuHz4uzu+hKeZ3PhQET6t8zWIqo\nD1GlY1yo+z+aQKNgVeq5lkvUTP+GH9E1YHQ7/XMFicaV9JScK8nJ835fvw2/\nS7JEBWa+8Pr/Gb6mR71vJFcuuVIbVKC9I0cnc6qRk+6evxcFZ+TB4O8p9/8T\ndEujUvEOSniXjJUZkhFMHSvkigarrr65yvmC4p+OacSI9Sj3wTeqw5IUJjNv\nqUNIVkXEKb9g1cOg9jhoXjLgE4G5qfUyNpvS57HXnt4TzgDlltWMGbxKnNas\nIoCx\r\n=6Y69\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjIKKF5BQ3Yo6XosmUTaoF/5KG+2GWXkz9vJ7aOb/WXAIhAIXVJh1emkmbeImtP5iKr9v7wIIIIvoSDb/J/9KTmHIn"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.3_1575669267293_0.7097288186251132"},"_hasShrinkwrap":false},"0.13.1-alpha.4":{"name":"@react-ssr/core","version":"0.13.1-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"02cc68490b83f4adf0bb2af4a7b067cabf763427","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-bI5VLZl4rQWxSBFhBb2GXJPawikJBw9zXZW3gS+gHCdd+MABStYHwgUlJCLMt90ILps2p/YcEtPi41V5yFPfmg==","shasum":"d0f86e72a572bf85ab378186b3ea5f8fe98e569b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.4.tgz","fileCount":27,"unpackedSize":204965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6s7ICRA9TVsSAnZWagAAS9UQAIdpAQ/lpqVi1jRw6hiX\nh9dYc9n6j8FVvALr1rfugCFn91AK4RLOViiKYTWkixJgzMUd39TtCtnCouR5\nF9oO+LdPuPUZDye35nCv8prx5Sbru6MMRAWYBnyjcCVZGVBsodoi98BNTEeu\nT8Hn8Axcvn2S3mknVUKUffh5jZuRnqDTuFZYaznG1od7B8FQhkRUZOu+DZ3g\nLI6Nyh+yQNGGUS1ZuFMqnSEo2Fp2m6PVFVr4e8pwuROixAoKMjF7eOm3Rwcn\n42xXzllQnToLWNV+IaQZFvRZnuL2Qyj6C6nuvjFu564HqlLBkBc3VDJ9oJV5\nv6M0bvMlzWzGicCyr8DRfBcQsHDojD767EeNcUi7VT0RGfJbH4FN9qGrxRwl\np2ZBhLVDr3sONY5inI2QNxYUOqNS3kEIyLJxD8uOSmDnB2KtHzx+enr5sips\nhvgWW5r61H5lP9sfnakwsW9Bmwd8uAuRvlKbYbr2CXT9vtyqf+6/FVNCjU40\nAJ4GTa3GV4j9N1grfYMrzgEEbJqWODHMOU77IP8mJVrwyqEKlo69ZtgCyG/i\nDTIMu+J12xemnTh/4Dn5Hlrxev4kMx3utf+9f6mbw/ZSgeFk+zwoGp4T/wcN\n68w0akumZ4oR//UUD/D2lRpiqfhPz9UVP8TVvzWXgmt97mP6Bj9UPzioREJh\n97ve\r\n=qW5B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcse9dR6BxwJ2sCjtSQI8M2afzLbXCfyzG37FPRSk6ZgIhAN9HqTiPXy+xp+nAfRLrYksCIrGsY8ld+zjPZu14lS90"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.4_1575669447719_0.8691011104773074"},"_hasShrinkwrap":false},"0.13.1-alpha.5":{"name":"@react-ssr/core","version":"0.13.1-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"bba17f02d08c9686be113355a9349be00a4789e2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.5","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-uEjxWhIbU+4ZZN9emXDHTZD4RJO8aVvnv741FBstGs95a4QgI4/AD0utLnokVnGh48rrxgW+ynhrTjj0qRy+Qg==","shasum":"cdeb391b731c14aa18b066284652d5ed60486f2a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.5.tgz","fileCount":27,"unpackedSize":204943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6s87CRA9TVsSAnZWagAAKSwP/ix9c89Wj/BfD5tZItIg\n/fAbXW9WeOBTe7uM0daMj/n/pkK25g9oUFL6mSmcNr9YrZw0prXwsAGxUmpB\nzaKToxuqAz0hF0Tsvva0YKRhK1FOh5Fx/YdeuktRoXDrhqQzK804j6bspaZ1\ncKyYu2fJfZrvow2Iyb3tyaf6cqGqa2gdmi35Zz3fVjKWR9QknLEISOIPnLIf\n8GppNIS/4FaM3Dq+PuQOEntwXj5QDcvh6jU2GV2iY4XrBAoAPmkbQplOu5Oe\nPnq1Ewy7nG3os94nTibjppk9gBru6mgW4O3SzKSylZv3gLe17bSNpN4ELXeO\nvAnwNEE5CYyfT20kVdykNN0SG50qQdtHX99BXOJjVrNxBVpqMFfM+ZnI2Zm7\nLFG+1rb9Qi6PD1wUxrtnY7hsTNzJeHCB0CeR4ySSpAuH/XrsixlXjG2JTF/T\ngE3onYP57f1sY8fJHKIn9FFXhzNOVZPWF9Z5WSmuK6aZIpXPWH9bhUzfe65g\npQtY1gn1juhpIGtA2xSOrGjRNc5/r6I36iqRZZgSQKJKKlWk0lXZlB8GKlbV\nljHaORLu5+fodD2aBwYTDWXbLhNZ3MUolngUYRP/MEPX6n7lktJi+rEeD1lW\nxrRu8x4Y0DYB1Wg+odt/vwqE2T0iw7sjOU76jaoFcw59vLohEyWpwX3r1Mj3\nkFgY\r\n=UFVD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLOjkDYd7jMMDEW+yeiRA5vXMvCKW1LhCTXo4Lb9KwFQIgLjpBZqV8ETZpCMmYap97kRhzYt1NWb8o8VnUtrpFk2U="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.5_1575669562892_0.40039541064744566"},"_hasShrinkwrap":false},"0.13.1-alpha.6":{"name":"@react-ssr/core","version":"0.13.1-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"729cf7ba9985c9c47c9c8dc3c7613880ad0c4517","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.6","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-CqD+yGkuBRVnJQi8aGdYDifp9ZEdjG+DJnn4Jca9kb0ky7tjUzpo6G8e8tFXBjMzVfeoIEgpVnCrro6sedU7Bw==","shasum":"5dfb03c15382c7f4da2dea312c6cf136e0c43ef4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.6.tgz","fileCount":27,"unpackedSize":204941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6s+0CRA9TVsSAnZWagAAYu0QAIuojyx1VE3nOS3nigJk\n4S7K+YmWU27UdaCfO/GAuSRM/iWdsOWdLHlF9qS/GY/hB6aq1/2ZKZKxP6z5\nfuynI7Mx2+roJB4SHv1lI8Z+BaIxtcmqbSufTNTjZ8xeBhHIh6+GyOa3+g+e\nj+xZq3bfYxQT3PuL8E6ZnUtzAla5Vd+zcBopJmYqUjtvW0107q4LoJTwrs87\nJ8DTmiwDSUohDflPIyfUCd3VmMKnUuUDLWai+6JPqqEyd8kMxxG/fp2VLCPg\nYGjVkHAaucMCaepzGHvrjSDabyt9ANbZGahNEy7dnhBiOwiWIsjuCXW6FnNX\nVS2TOHc3cHHwJZa8O3lZvbinobkIvJzLKhHOSP29PNMTKv8Wy36+LxtrLyX4\npkwy/RzEMzOosAOKd+T0iNmKN+beMI2Imopgbi9sxuMJy0SOQZiZ/O9Emt0Y\nJYownZm0TgyoQBngy+useDH5wdHn3E/PDBlIgNM77miMlDDLybVEcIpkuoi5\ng/6JdXK87zvCtZxltQDsIn7zX7dDtgU88xXFRDKR/JzDIboUlesteeFR2Ns5\nglfMgvMldEIAOOMteFScUvoBe6SDEv8ACgm6AVqg3DpFCT/Cxv0qCqn4eVad\neMIhgblO3XMMuyocp9hd+e/9fJ9VuqvUSNWILXHDOoVEfROiHanrBIyp0U5X\nIkjW\r\n=QLnx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHRjLBWYVmPMk/cw4yrAA2p/jEsXE9vC3UQ3BGaLerGhAiBvoKw4SCONv7SHM/yGsAx5MOOHanQxEUoX0rNWZ6HFMQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.6_1575669684363_0.16493554857969772"},"_hasShrinkwrap":false},"0.13.1-alpha.7":{"name":"@react-ssr/core","version":"0.13.1-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3b6724a3535ab0de044c3bfe023a4bd2d82a126c","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.7","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-kao7R3Qt3L3kWNtp9KVssANQSRYa31PyiEYhTNkCziiZ9NxJxyjBriCx3g0v2vDLzU5oP8/w07qm21hnv2AtDw==","shasum":"94d5eb3bc9fb8f4ef2331729b175b0a56c6e6342","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.7.tgz","fileCount":27,"unpackedSize":204961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6tBHCRA9TVsSAnZWagAA9MoQAIS6SjwgCDCIkvs3UPIE\n2LV4S915XKyLUsWdqBl+8l/NXsL2Jy1gEanWlEhuTg12+PmEUiUArYJTN209\n54rlChDrDcB6Gy189VFIj/mdPz4TEoJwOI1yAWfKzdU4vQzk4SWG/NId5ZSA\ntsvQpwYsevVC2cialYvRPWJwXqOKWhqEk1CaVz+VynemTfl+/qeFZpMpQr1u\nny9QKfEMvh3QNldo7HvM7r+1uyMFyLRTyR44MDG3D2p1RWo6TUs3isvz2cxE\nvUasrlZAC7D5/rKfXYEBE7rlMPuiXJY3wF9WFWcakoD2XQgjQkXezovhuJdf\nU00BCzeo5XE8SVTWOO3KfT/swDQhQoXBez3fd5xZqvh+yavlihbT8j0BMu4p\n9jJYiYP0t/2o8VZfB10O1Np4tETps6jaq3+4WWCk5t37ZaceWCAVLp+Qqjkl\nMhP/qMz4HA8FuN0JIZCy5I40afo1YSS4r9OxworaksgYJnvAVcFf6mA3/dR6\ntDxvQWEwqMZ96R8MdbUuYRNJNxfdbapB/OYfY7vfQBapfArGs189QRtrapto\nYM9I+tnhJpR59KOhijWdKaGpDE6m6sHvmttUl9NlU4kzWEmVjr+irlImIQW+\nvZzfhShiqaAkfHzyN9N5BeP5pKdAAIo0rCfTDwqvlL2fBUTQ49tUcKTRnnbd\ns9y0\r\n=L91l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwpKLVeFuQKl77z5IDugTMwTzxOpR8DniB+zuNk/2GaAiBOrovqr5QphQypIGUqqfACPyS/je0vrwyeReXNU10I7Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.7_1575669831223_0.8928644458675263"},"_hasShrinkwrap":false},"0.13.1-alpha.8":{"name":"@react-ssr/core","version":"0.13.1-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"78d35671067c07d44e231a13e5263a423c685519","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.8","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-XZRqcRUJOprEvrCxru7I04BMRDCGJmofzKRtZ8PzAZuxRebn2jT9qnX4pnPTNo6ZyuEj88jwNeDfYP+PEpOgMg==","shasum":"0d0d19041b77314939f6e17d339d1da19bb9e9d7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.8.tgz","fileCount":27,"unpackedSize":204921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6tn4CRA9TVsSAnZWagAAoAwQAKUVN71g4yHYnnBXXEi9\n4geppuYr6aa9c0lumRlASTXs3uRHaWjyqBr2ornAriHeorrsbSpwZqde5HKq\nzf0ylA+RE2OVbkuP9Px8oO2zMJCAp6wZerBx0kgUFxdzk398pQTumWUMERKO\n/X5YKqBQlaBO5P4QIsG8RT69MR2Pkt8C6RoSFqlvzvxFBZOuOWZhkInFTLSY\nnSjmlUuVWzBJi1PvVSvnZ1QS7CP7Xr4v3vAf/IGBXp66ZeEkJEZf/cYSbG+R\nALTF+7Eyi//8drED+mOvE7zQd0DlwTgsbCpGIzj6iPcefJFbjdJEIeEjjryw\nZGaCI+pwoSo5VtniN5XEsC+SxSnkVt6i1F+wITJruYpXoPjUdfyzdUCANUyF\ngCYc0fmGltUCh12lFKVcIztDJm0Ne/iXwPlLVXW9UaCsD/Syt/Q7fNhKrrkQ\n18jho1NA70JymZRwzW5Bt5saRYh48s5wDlPAWhwIsrmWsKoO1VGat9kwNoFk\nbHznoQ+QzmKNs3hTR0dTlnBxetHLvSCZpnXpZeh4df2/5ZwiOcyHR+SSU/Wd\nGHtDcCdifHrhLiNA0ys0IBKBNP+sxVh2ViS1gACS1zfRcC2fh36623H8irHH\nS3+wVSQhUmskkYXpu3AzawLNwNoWtYvc3MOUISwArRrkA85zqxt0G4qPUgKD\ngVDt\r\n=Plfn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSFAWuFG4iH4K5AWd4ebteZgSBV8A8hWj3V6ZLSk5BsAiAx4/2FNrYsdh16yaJlrhl4D42jT2IbTI93dQVSUZSBig=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.8_1575672312056_0.9580405427134728"},"_hasShrinkwrap":false},"0.13.1-alpha.9":{"name":"@react-ssr/core","version":"0.13.1-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"860c5ec3b47bd4a3a276f0b752d6f1e6b01abfa9","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.9","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-fRTNnjW5CWzX/wZvSzEQ/cHQEjtK89Rzn5A1RKQXDZo6HTs6aszhuWNsoiO9fOSVtWGcZnUtU2t20MUe589Vnw==","shasum":"6eb00e43376aaceeb829f0406978b55c6780595a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.9.tgz","fileCount":27,"unpackedSize":204943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6tsBCRA9TVsSAnZWagAAy50QAJziKpCf2YTUl2i2B3aC\nAfG7G4JqB7m8BgCGA+9K9ey/k59ZvzrfKmfWsNh8RD945oc/2QbOmP18mFVJ\n5bxjdBydginkcv1IUGHiZ5JUX0lvRs8OUfPzWz86BnwWxIhAjRRs+UyDH71B\nNIeG2Q+IFjH9ZolGt3K2qtKksUA/UIH14SJrP9TVgMootrHSlTAXSzXSmsOs\nWmNb5xSXpx5AE5+rVW3YCRA8dhD0FHHqkLYduyJLYCSt6Bw1i9hnYuHZzr8n\ny5DCUSWKjl7OLkHyPBeU6xHB62Zf9KWSS1QQl1z9xsDtO6l4SSwSvb4AuKNt\nkX6Qt5eFsDVOULrxUqUpxhLJ2vc3dh+DRI2HMQlCvvTWAU4ZBZP0CL7KNUKx\nTjgVsIyucYREXGFn+6SAYYsi0dbd9lL0nwKZsD2kP7oR+1GCJtIh7uw/gWJq\nQuwOdnalVhoFDYxEMzx3nq8B6NJt45Bzwl3uPtYLqsfg32wRZBvt5R3d0Ise\n1JZ3CEViwJt5fw+TnNovHy8Uks0YzeY4SardmAHBp/5d6k33SvgiKwxVLNq8\nqwjyxuyHjCdcskbXP0ZOpBquhIzK5TdN0JobsHgDnZOCVN/KgtLRcRmQMsTf\nfHyZ8aml8ZmzbjMg+jxGEpStPc4yS/3MdD4oBsxF0KM/WA4LoUhPYifxDvcQ\nPiB2\r\n=tPQG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvCUbJmQPEGdIdxbN+a5aNgG94TqJSHbmd6QOKz6QLQAiEAzahwwDKxbyulwx6Gm2ncylu4790LI7oMN2r3Ry9fJbE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.9_1575672576623_0.3819279233921109"},"_hasShrinkwrap":false},"0.13.1-alpha.10":{"name":"@react-ssr/core","version":"0.13.1-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3f85ff0bd4cc7fce1e0b58fdc4f74a98088788a3","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.10","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-+taU9zvdXJE8Nkb/EX+Wg3dZ/dBMVz8PczLuJM+f+lgSXX+QqThZGLkIQ0KpuZCmnR40elky9BAnuUjj/umwVA==","shasum":"7bd31f11ee22ccf97eabc5fa1a483b91bc3cb66f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.10.tgz","fileCount":27,"unpackedSize":204966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6tyPCRA9TVsSAnZWagAAiXkP/12KHIswAJnLncy/ww6r\n2/vDep0q1xlHb8MvSFfCp76gu1+gpiY/1OlVEYZOFExf0jvIZR8Oav5PHggR\nKkfoG/gu7pxkXqK3D7OIJfjAHkO0QNsaSPv4YZhaqMNjRjGxPqBexlW4sBtB\nT7wXs3tq3+fEDY1vYZLPpKWMri1mBIOKhWCORzCXuwM/DhTnRuWxnoVBAOOG\nwVmTC6DJpvgdd4SSIQ2WJu7/OHpVgVB+LsbELW1CmkLlQIWMueBiqNuKfp7B\nUh0w50oyjIfMFrQ0wXEiyRunRUJVsglhThuzHIrZI/66dXEmX6ASJavZNoOw\n7cYTj/8OHYdIOlPNrGqmf+kcjC8fyCoYOEoljzm9HMs2EzJdwyS2Jpym6PFs\nQw5N+9GiPFMWlinNgtNK1ckOCp94VTEkcY9gFs6T0WQ2Gc7TVgS8+QBdfbek\nnn2AAGzBBtuiIlM3aQRbYwkwY3yV13WX8YSTqsf+IQKKMJ0IhgZeRC8Czc/N\nRTNFCz/dnIJyl+yTSeUPCFSVWaPjDvZRpPVcAZwxwgrJ6rR18QWZjEfD3tYB\nnEph3XBxobOU2ExuiVOE2Rik9KJgLlowwAizgTPGSaXmKoKEp/9zvhIVxxcm\nEbUO30N2kXtqPm9ebs8vHtzf0nhcxXd6faL7nxShq02HQecx6WNgwefJ9IGd\n680y\r\n=d+Cs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9KYpMW2VvVvZKBck6Q7Wb7JXwgISrwxnmgyhaun2iWgIhAM77yEN1tqL62KIwXG1vvdVg46UmWazTSuQB1udHYLdi"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.10_1575672975375_0.7269378689045536"},"_hasShrinkwrap":false},"0.13.1-alpha.11":{"name":"@react-ssr/core","version":"0.13.1-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"47a2c65a2dc0f5bacdee025101f0c11e4bd61a22","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.11","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-BoVnX47LGq4Sbt9oe+bB+sUjE6JtwPhmUTTIAeL9+P3WuLaB10iz+fa6rD4IAZxmUXqvv4bf8eMVIcbP99cV6w==","shasum":"157d85c019c2153a15834157341834b27641f48c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.11.tgz","fileCount":27,"unpackedSize":204986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6t1KCRA9TVsSAnZWagAACf0P/i/t4+FAOhqJO4+B+UBO\n46DjbpkuEISJvsgNVmBhrNWF0DtvAk1r6dSIdqAOy9q9i3aX1NoBjATO8Poi\nK97rY1dHWEEN8LheHHuYTe/Ba+4SLs5txYa3K40LN5Y7Sxwx32XZPhza6guZ\nbtWm43VMfqt6QCGVgxR9mLwSttPCbiJWElJV/kUHCDBiSUwHa8SZckGeuzDa\nE29lAy4HwzMyHj+BqA72j6Wwd/yhb/NXrvzG7ELj/5VjuMUD3ECAjlioouSL\ne+Ozwa8TklFAYT9GgUtgSYHuHchMbMocEd/9HksA7MmjGBNHbMrZnKmi3Frr\nzMmL6D42J4M8IY4hTl26iq+6U3DxmRbbjFrhGO3Ksl7thPGBldY/aMzqKBVe\n0ap1skwXkt6kw659Nx4Amwesaxjoans7oUWlXPtcTYWC3jK7v+99fBPZj7fA\nZmj+PnVJPuubqZ3HOhwXqpD//VBpSuh20+1rtGiQDFAq23KqzD+233TspjvW\nawqDmmJazEqeiNFZ1/iySadYTOqQ4X5nGm5diE/x4vBSn71foGH8CpUg+B2d\n6xdGzT28RThBT2hJbRWEqN+L4608js/jt9vbzZVi4ph1lCAtysmQ/eYlgalA\n9htOXpv5XZBMAb55D8UpG5vkbOPTmMohN7Mw6oZ4Bfwzj9N+QVy5/eRDocgI\nGgNg\r\n=89Qd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGA3eecsEg22VMWhHk2nh0QRdrpzIZm4HQ9JdFxduJiIAiAT983qAI4ufeFgp46/7FHthWyRJJL2lQQwYWlNKNEHlA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.11_1575673162180_0.06289679554134286"},"_hasShrinkwrap":false},"0.13.1-alpha.12":{"name":"@react-ssr/core","version":"0.13.1-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"550e3fa0c177fb8dd60bf3aa2a179e406e2e7a6f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.12","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-M3zXZlEA8Pq/bk3Kd2K9hy/uvg3SqDrInuNs969IIRsNH0NFJW++L7MNVxjidkf/UYkCPTXrEuIpGZNegbJczQ==","shasum":"edeb0fb9efabd42aaa2faca1aaae50130d208451","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.12.tgz","fileCount":27,"unpackedSize":205010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6t7JCRA9TVsSAnZWagAAdaMP/02wzxlDNOtbtfKZpkYN\nfQdd6Yp6I45wiafe63IoTPfu6sJmDwYhE2K/vzA35sSHZ93mG1UZynJuiQEs\nOghIb4fBrNP+xCY02Ll+LGNDDQSMkt62W+j9IL7CcOY0DvdlBQOoc9n5l/L3\nqWOPjX5MK+QS3Ws/12K0ob8Qsg9J4Q4huquGDZwgDfcwuEuOXzKNNSNb7Tvh\nnzaAGrYgeSc9xirDOr436w11Kbai3iG3FubXW5DCOTo9PsHN6Upxn1aMlKvq\nkyuz2lDo4OwgQCoYIrpVAfTT23Gl52r81cfjks+rNWgpt40EPaQyuDAVmfKX\n5HwQM/dCa42Xg/WDALEf/b1V/ycYaCdWaFgSnt1+Gr90fTmkL+Pf1rt1MoqC\nJFTgGmYELTVswTmA6FJYdTqbIaYXvx9edYP23vfUApzL80L8nFMvl4Q5PgU0\nfrfIiNjFrqJuEsTiIxMOEBRhpJtdjMw5fnQZaJLEcij5OBZ6/mV/j8Rsubmv\nB1ZC8mAHFmufYpolZNXJKK6EU6s47ipZrhScs4D4Crcom3xZD1L/cXTni4cH\n5McVCKV3dsr05c+aYdpNKxN9uL8YYAzAn68O+cFFZELpYfEWQ1FHxGLs/2nR\nsE1L/R9uquWPtOvQoRrYI2CMj/3GEn1Iy4i/G5/OQ5d1Ce/wjSnGw1mpMpLw\n3EYu\r\n=VHW2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBALmxJ7cUDeFtJcxzfB9mlSxv/1y5KiUb0IbHoYlCBBAiB3TezBPWw3lZI0TCoNJ35I3RLvCbo/WYQ0Z1Bivwk8Tg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.12_1575673544556_0.9324066061363516"},"_hasShrinkwrap":false},"0.13.1-alpha.13":{"name":"@react-ssr/core","version":"0.13.1-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a633f10258963f4d96a580bcc510efad607b9a30","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.13","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-v/4xjkelt2X9LzAeFmzmTwwH/Dv/AdLzUX0ljqTi7efu5EgfQMWgYT7WeGPPH5zau3Zd0D3eFzqx3LosQCw4gQ==","shasum":"0abc6e82afcce4af5533c7d5818cb4d86ad363d5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.13.tgz","fileCount":27,"unpackedSize":205018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6t/eCRA9TVsSAnZWagAAyssQAIWuLE/YUVT509ZzHbHQ\n9WstyETNQZoVod/d5TpqPNUcQ7vxdqgOoZv6VBlpjKXbi2jJSHHu6IpgmIaT\nyVHFbQr4m9btzeQrgAsrmPv/MAJnCQl518gyhKJ4tfZW8nL1ldyMUi6ba27K\nkJFGPb16pu3fKDcmIiJ+SdeMumjB0FhYBVNcMl3cJBVNfdH/HIFzmN8j6cvz\n2a6jrfblXSFLwx0GB1l7CvC+LEnkyWTxoiACn8+tCxXe1n2q/52npfdwhAcN\nDUKE45DGf4mMkLtC6F3U5CWAT0qJemFYr+YuPFRGLPG6QnNgtwdY97TPzPra\nZRAScZJwnnuCO6D2rat6IIohID0zI3StMglM/gL8sGTEXS26X1/R3IZZBQIP\nYpoT7s20ZqbRaJWub1ctjq/VjpiVOHB65v+umzlnnd1IfsaN4eURKOL37k+0\n7GkRC7zqnc4pffHItVzyasxmhfAWWX8z9wBeKd4VcGYl/M7Heck+wuILWJw1\nIlLpbg5SDeDXhx6lW7YuLZgINiWjl8lPW6pTq1d8ONR2UG9X+yr96z5MKAof\nJHQZ9CIp7VCDYgnjoj5uV3muk1YykCEvt81B+doPnZbDFi83paZhCPnqLGaB\nM/hwXeaNyuJai1B5XYBacsFocZUTmAgVJx+NCKRWs3xejf0otUAbEB2t6Tdl\nGHLe\r\n=FTIU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEnlkyzBQXEzgHEF3yjrmdDpNf/iZv3sSRQzcCKopSjOAiEAhNAiw90ATK2LxdRuQeH8UX6kZ4yjz+c/fLrjbThR0Ec="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.13_1575673821613_0.5979030231913314"},"_hasShrinkwrap":false},"0.13.1-alpha.14":{"name":"@react-ssr/core","version":"0.13.1-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c2dd033b04ba1417474c24a881f2e2213b67d64b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.14","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-9lzARISeBNtrqCau4wUdRfaioxIEj9De2UWuEFX5QiYQQ8FuapumfTr8X0fGcsb49TZnJsK3ho9cNeKz8uBwxA==","shasum":"671912f9334272ba02455cf247031ae7b5fda266","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.14.tgz","fileCount":27,"unpackedSize":205022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uEACRA9TVsSAnZWagAAcpEP/iEobev4w67SUIccRWtY\npRuAWlohC33VhlVv5RemZ1CZ9BBDuYtzzWGHwlJ0Ob2ZcoLdt2Pp+T7FsHF5\nI6q6uk2hHlXBmLWfTk7ZokRhwrjPdwyMeGc8tIYkaXmIBlDwZRl492aDWwng\nwRjBY1UEWqR1IZloLkvvLQgVHeAQz+RzRZQgDTDv6SuBdMZcOWZoDDwd5lqH\nVA3jX/zOsc/YmZhENAJeBldsF/MSEn+wWpwGQpUlHbDaKCusNBkMhl9mrE8E\nTz1NcPUp/B8PbWAIxvKqoC4l771hU+hvS/pzFt0QrCO6BczBHduZm5P2pOzM\nREE+vYz9IVJXXC6UXr412LK3aMUC5H/peqQhjNCX3UeOvoGN1oSc85lnQo4p\nK07Ljv3G82A639dSg3rZ39914D8Ru9P3kTiQSYRXv628thWsQCucsP97tkIB\nVxIkInqjtCnk7jyfwbk9+6WVMXfgJCvE+MdO4O3GyZHa6akf2WvVQzJ9bkqf\nWNqecx7hkehepam65zPUqjsJIQ+LR3T/QURUMD0XdUXdoJFqnaM/vHJCBrxq\nDkWNrgDfRDg8OPNcEL7DVl3+QgX5lBOZnbhP4q8fS76jW8nRS9Ca/KnrzB0h\nfQhxEcAwiZt9tGdSXRiy0589bdKAfoJ55XiYRZzLEJ/LmNGU6Q7qDR0hAaIQ\ntv9t\r\n=Fvsl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbCtdyrh3IefdsqAVj+A53yxy6Sm8w7dZxaQFaSAmMRAiEA2hZrLq6FNaVvPApz7pBmlqvjMuhVATiS94HXPAmDLTg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.14_1575674112412_0.2654075656318029"},"_hasShrinkwrap":false},"0.13.1-alpha.15":{"name":"@react-ssr/core","version":"0.13.1-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b9a0a65894e47172b50ff476709ad068354e402d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.15","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-DC45UNHQ7w4yR8qdaUuxxz5RZbfwI4D45YVFEhD2tZCVG1VtO3y1vWsZJa7cyuyfp0NMfawhefSFuAZqh2esgA==","shasum":"7212da4e71565d722276f055fcc91be97e6e17b7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.15.tgz","fileCount":27,"unpackedSize":205026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uICCRA9TVsSAnZWagAAG7gP/3ibTR3tEUPxhDF/A92y\nuC/um6c7oBbaf2ZKwI/cI5zJJWWbvS5oD3MMz/6XLTUKW6zaKlIumTXfM+bv\n2bpScNtRjrElzH8duz8WzW/bvVIbby6WtUXRwe3Ptm7Rpxs1y0RH8rufDE68\noDHgV5fKD/6x6E/7Pq7PKg+YsQnSiEkzUduwB9/SnQGAilThi04N7hrT/Oow\nvRVtjPhCjrtCsRKt/RY+ICIzCF387p8GXXY6mCyoxpBbir11/sl6kUV+TNQW\n8RfdbakWMfGrF6bAfMEetE5VqckeLURQuJ0c/tIfWk5hi783wuPCyFtdW/bl\nd2qy0AsczAh0CZqK68xPYI8NxJhBwzucDx67jgSnne3r4+KdBkjgdcXledyF\nEjxnQoBEX0uq3mQXKjYqryap43Hx1pmxDOYIO/8oI2GNWxuYOArUj24Flehd\nnIlLd4LwUTNpkVy/OnPYej7u8ut/8nCg9/7uhyXPlaEcmxE5VazzxpA4GmzM\nBZ0gwd8NpgO+VzG7XaPDasIsrZnXT8b+GjwleISPunmHiKxfsyRBJ/VZzRNc\nEmuQcZmz6e6RXWHvLWzseDlG6LnO5pZATHPTQ2c3GLbnFKJoGgHosyssiFA/\nzpnEdyjDEir6jFqAivPR+TTME4wpTktD3nLvT2dhB6fK3Th2p/wfIX+kZ8Vi\nuZQj\r\n=3fzy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDGRMTntlzoZET5My/iGzqBIbQjLuNMB/9eNoWKcMTIpAiEA0idkjbtuSsIUz8KumM7CWznikQDRF/rb5nmom+wkqS0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.15_1575674370102_0.9429402632067954"},"_hasShrinkwrap":false},"0.13.1-alpha.16":{"name":"@react-ssr/core","version":"0.13.1-alpha.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f8f3dd815dd7edda44cfc9f639ca7bf948861551","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.16","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-vsS1fh2Sk3CRORtaBJd8XRbWfAyjvtxdR3n0Lw0jYzxnk+l4aCVN4Ty01OuYQAkt4TgjWBAKXFLHwGIuKDP4Qg==","shasum":"5e8044791cc0003283acb8a17da0030c88344ded","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.16.tgz","fileCount":27,"unpackedSize":205030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uLrCRA9TVsSAnZWagAAJC0QAIhdBf/A0lon6oNpvK/Y\nHf1Vjl8BtUtIBBrQ1SaDN2/lVGtPE2g1rZwuoXt0Kco8l7nvrCzoI8aNu89X\nfr5oooilziBhsLQ8RtcUw+vAGIMAHMMBkVZRb4zKswQ2v/e+G4zawVkqg6b8\nJ4ieLKPfemxs4LeFWmK40/k7W1GBtkRQDxJNI/GhLdB1k/SOGkuynlARUs+k\nJRzX4cAbBUsdKInzY08B7oGZKS3tTUoBbFkiU4Yk5tGrLoVLlklXYZBDeJBe\n5NngZV/VNPLtY/6QSggAVhzupoEPfvhUpxoNWnvkzMQnfPUgRrB1w77k5Vz/\narSIgro9yd3ZABnyAKfAsujO4SEtXBzbV8oyGVs9A03WoITPsvM2afSKmNUC\nvEfx2gZkksyvfnYpwDw23xGbkONLIWa3Ie1bWOEOmnvVHuZhSqvaThyzTDCo\nLDvLma7NxraXIx3vMzQLwNfPo5b3En/PiqstcIDqXBqfrhQ4W2RE4XJDd0Ka\nuc62yjOXLP8BKQ0W9MqEQHv/fFd5jKGR4oF8iIC/rxoDyE7Ytf+g1Iy+m3QO\nZ+osZZXlK/8SA5y/EpG4h799KZCo4k9M4eN+csInPjeYr4k8dK9NEq2KfvAy\nudjTkVRoJiCZsdlQtojwD4sz135j4pubIuum8djeE+byYtUyhLUjMezXTTyE\n8ZD5\r\n=nfEG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx7JM5Nwh97wPfWAZk9nED43C1J4TDJsAzYBPeBP7XIQIgUdN7l/Nvka2au5VVFkmR/J0UHfr3xR+gtD+zTFQv5Ts="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.16_1575674603549_0.47510282752163513"},"_hasShrinkwrap":false},"0.13.1-alpha.17":{"name":"@react-ssr/core","version":"0.13.1-alpha.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0e01e0079774186c5c0691268fdc274019d710e0","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.17","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-M8Mf+0fWF6QXyNqWEdzmSM3pyoDr/l1BmxJTZIwaBlOek+Ht90O/sMQGGLFaFrMA9lgLkB5TXgpJCu5JNbbHKA==","shasum":"c3e1aba830cb35339d1ec1e422dcd41a11f0303d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.17.tgz","fileCount":27,"unpackedSize":204922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uOqCRA9TVsSAnZWagAA40YP/3fi0xhMm2h4e2bAn5CQ\nF8DYKHAt6pSZ1FwQJKlNQdmSmi92Q1kDKInJX8+15QONJVsbEacsqQMZLByF\noIyEUuyT8VoV+dSTFqCW+1BqH4s62ooeZ1J3ip0kAOE6hJiqCWvqo1pr7+qi\ndeUsFCibYhmMFzjAPfU5Rx3H7Q5JA9/eSbT2jiiWAgId1jdousp78lkg5Fmb\nGcAcay6H70tdoYI9Nj50sQrJmHx03ydHlcaY5xSM7dYY25T82ZbMsRSiJH8l\nmwJV6bY3MIowv2lg2+6eLMlPoQdzUwB4hroofAlMDS4yTp/SJHx0YzbyW1/R\ngVy5IfNdHR0ozHCg9+hkLCaSBGzEAeHhuN3MMZsOWajuDaEck3gC4tkG5vtQ\nWN+Efwvg9cynPnlFh0zojPskoGIvszr12AW/XdYKl5Vu3/oVKYfm9Kz12hkZ\n8SWnbzZNA3buHZu7qpXxMK31EIHWTg/4DVlxsRyXW8pxJr2gXRtqJCeNiMb1\n5kN/6Ac5nkzzYN6vghKomNTbKlM6FvMuZfs654+40W3n97wT67plIIfUoAsQ\ncqxNqKvgSTBaVogPnw5TViwKaGcbG7BkjaFqK9WOJX0/2ZQEqWeWn7V+oC/6\nJzLr59iDQ9psULO91lu3sSgVTV8wO/oeBXenBdGDeH7eJLSctkaHv9RFFTbW\n8ejD\r\n=w1vV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnjKWT9JgsmHgi5rZQpo6hFq67YSI0m01j1nzAwxgfLQIhANE76mpB1GM4i4seLk/Cl/30vlQsKyanA5KSSZ3kRUN+"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.17_1575674793510_0.9842552287845432"},"_hasShrinkwrap":false},"0.13.1-alpha.18":{"name":"@react-ssr/core","version":"0.13.1-alpha.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3f0aac097443a86cf1ebf6b3663d6202a658e291","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.18","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-PtTEzsW0MoRw/5nCc0KnHo7YbX9WeAW4vlnpPWD1fS2IRzTdmZEzTdenSDIf74mmK7rkdVy+oQ7+YEaNiyhauA==","shasum":"6d1266f78f5615d6e6c231256ba677e03fb70a73","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.18.tgz","fileCount":27,"unpackedSize":204928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uUICRA9TVsSAnZWagAAFHYP+wZDu2G8IWI1mP/SM9wC\nqmZ655S72lY6gpJ76AyKmF2XmxCmjZsNvPq5DIcwyuNmJ5JOjSGa7roQkuBP\n+wV/8pyKXxMsCa/2ZZ8Pwgm20hhlnkdX3xZkRj73+VET1/Ipl7FDPu+O408R\nlBFKzWOwUGdQq/6uUOAImSBszU/vH1oZC2d9FuHi8HuAW/CI9Pjm1YSRyhG3\nMW1tTjP/0sdHvqDOdDBL8HdIg+MRmneLuuuI0sx+BdW5tNUsYUiZZq1OsLxU\nkdX5X1bAVlGSx+dv9hhQM30kO15pT0aXZKAGO9ZU0TBmFC3XmJtomJxKi7vF\nZcegSZVz6JbFn6ANTJgUWLyxKuwy1y8p7S4ghgOPp0Ryxmj5hIKd2YuCRRSY\n8H8f82dJ1gJMHnfaZj6Cu+WmHwzvFtfs/nZL08Ff/dv+9mQMaIbveXFmtipf\nZe72lb6tb7WYfdqKXfhFYmE6Epwh1VQ13ejmaWSEad1dNgZXn/HJxZZjSXnc\nMTrxRIc+iBwRO7YVR/kgwien9UQTcbzRLzNH7BfLKCh8iCJDcu3cOra1IaW/\no/HA5uM1t9xqvCvXyD5TZVPPlHs29sWVhRd/KLl6Vntt4ZIiReEXliRKFbXV\n6eBhDZ7zf1/HIOH1AnY8CTx3D0wAADP8rth2aM3VBhUzXc0jttuL76PHkAgj\ngpfC\r\n=TnAD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGCgQrEz8Lodj9BYqnwYMJPc0nA21adOXxX/G6gZFXncAiB9DTrJeEpjXYHtrP5zZMFQ1LrsCJdZSAu8TsSGE0h+cw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.18_1575675144195_0.9952399538972196"},"_hasShrinkwrap":false},"0.13.1-alpha.19":{"name":"@react-ssr/core","version":"0.13.1-alpha.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7afb33ea27a46d78786e894ecea0820668e039cb","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.19","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-3J3eUo9O48Cfq/NRi5xcZ5RQRymzL+Bc6ZaXV2RkPVcLwrQsbi9RasqYzUTqC4AxFWeTwQ5IA2/ReDskE5cueQ==","shasum":"2ee782ec09a720f7f59472e71f5e37acd9893144","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.19.tgz","fileCount":27,"unpackedSize":204959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uXnCRA9TVsSAnZWagAAN2sQAJXqj8G8pZNuJ5nLHymT\nEKAXRuQeO7euSCjk7dNjfIqZom95GYaHWx9Qhz3wje5SFOSrI7QUCo0VBkez\n6eGGYsozsaniKvEIRDnk27d0BkCT+/rITVtal8kD4+EDPqyKivL7gDerGygD\nqs/fHhHa/JEQJnn+VBTpa4tbsgxQLJEDhI4iOSliCPAiXlU8FrGjU3Fh6vut\nwqxI/H6Wq1lL/fN0BUkG5pnRP76FQshADaBhU0dsHH77iYJLi468ADnRXVhU\neo6N4ETD0fOoGsN/0pDmXm6n3WKPdRgZ3aPaeDnTDYK8Zj+q95GPVke3+9Ov\nPRk+qHa3g/miOJwMwmY7uD3CFP51voqFXlWCnzhxxiyhoET7XKkTNX2Rb9AJ\nb54BgdKh2hXMYtzUsN48FNiX18MjJOlMFVUkF8iq+N2IlhzVGwQBQgXlqyBM\nUA0NQ8Zv4TMHPTxKZoyIugD27jOuAisH9H8B0jYENT4TjUc+QwumyduZzcRd\nZm0DkXM9Tksbu5QLrPA58ujV8II4JNnI22hIOQK4mdUDrGDA0CXXsx2vk1RB\nnOIUFUTZTSqglN/fftYw6Lyr4kuiUrxNKWlIWO6PwdbwFqeYcXpLswQ94oWP\nCBoTqgi9oYkNKMQoG+4JuEce7Ibpt2mAl8WQux2kZ98cph9eeIXxEZscOOTU\nNCrC\r\n=f6uq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCLRvIREXM5gK/M6kGXP8Ldi1sZ+H/2tuui2riPpTcuAIgRdIpbQWwr7GMVUJBH+37U0R6UrMMaABE19kWsnC4A6g="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.19_1575675367163_0.08774901028965831"},"_hasShrinkwrap":false},"0.13.1-alpha.20":{"name":"@react-ssr/core","version":"0.13.1-alpha.20","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1cbd325b9ff7c185453188d65be57cc0620c12e5","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.20","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-XfFrWidw2oscBtUFtjRDsm3OxzU0wx46pMdeKnbj1cvN7ZOSJ+7GuBRSkqP6jwEo9ciROk602C+FSFmSg5pRDQ==","shasum":"8ed34132c88a7cc3f1a0f867cd9e4f0098477fd4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.20.tgz","fileCount":27,"unpackedSize":204979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uYxCRA9TVsSAnZWagAAlfUP+gOvTjvpta02zR2zTerl\nwZ88omBqLgfKcJglfDwsi/SkWIWFFe2HpMf/h7S/W52ZJHoOwYywZG5XJlYc\nJfSx3QL2EUJjEXRq7hwI1U1JDUuRluhkT0eUFVvtCECNoSShQrtaKP59gmeu\nvMoFFD7DpyL9uC8dqIqsjecvzMXBeZCpy9ZZE0wqYA3WU63q5zNazhMoPgoS\nhSHO988Bp50MH2H72y1/4JgdxDCfpzfbWfXJZvSVAeTVMNNvlAfZYg1Dp63w\nypxQA1tTbCX8ryjqoarBNsJYlgVBx2P8CoeYpFRtpvp6XKJ376qstrs2LF5L\nDnsdA1MCgRUdvl9H4O3LLim73PPxwFCt0MfX0JRTOyMmxMSFvgYmjhSAYa2m\n6iYH4VH49sAYqCVSeVwwhnAi2S/TEKb0863ooG/ZZ5JpvuYrsGsnNetd0yuk\nLvP4ePJwDFVI0p1wDsaJDNI4R3/QN/AvCimJZbqnl3XKCpwUIpQQhIXZkOyr\n9T06tyrvEC3L3vR2bZi1yHVHMqLVSqE4+1B5xLIQJjYU9T3Vn1xKayzNXSGQ\n6D9RHx9saMasc0I48dYs4v6GM90zcGmp59wiRfruD9MU2AbyPW1S8L0rmet8\nshyLbPtlBmFrt0TrmnMSTqbl5T689DarHvKQx50cQJIUifOjG0zxqZTQStRq\nCauq\r\n=9R+Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyqx4234MA+0cmc2vgwk+IM2D4mnpiGdmAkReK1F1A8AiEAnBQLynnEyhBxvmQjkJ7AJ0bUR8Tls5MQDRkGq6PAUWM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.20_1575675441130_0.2925833618925604"},"_hasShrinkwrap":false},"0.13.1-alpha.21":{"name":"@react-ssr/core","version":"0.13.1-alpha.21","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e7b73ccf8a5570bc14f6931b33bf0154a0b5fec2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.21","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-VKYzXj9HXgLp+JEO/YgHRPhN6SXJC9Lm3KTm/6Jf6eoJBxvEquTe4hmCL+t9uCyKoNLWo2ntFpT0gfsZZ1dkDA==","shasum":"fc33b0a44e2c804666c4f05f78aae4a9d95f891d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.21.tgz","fileCount":27,"unpackedSize":204987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6ubnCRA9TVsSAnZWagAAQXwP/RGQhv+u23F/cTs7lwWS\ngmjEtxVyOg8Wh0FRLFwBzM7ScG8jBeOnztbevuNKT8dtNjJXutrGUrnq4IwP\nvJx4awfokZ6tCTekvDamZtt2LojEfWuer5a/HC3yi+1vALZFVV5sPO1KHDy9\nyNRDJhKY+ZbeGu5va3bls8Yp7LR+9x2IgiJjZl8YQnF+znCNnCdpOiDwuLtW\n+zzGeFf7oRemTMAsSgmcgdmSTxuuidOZDliGnZkPRaqDcKYSkFkEyx4WEua7\ngEl4YI7laQxKJ1issHZIhoOLRGgAzSJb26seCkewvL1B0D3I73Myxd4yNlTs\nIVF4m48B6s4IB1N6se6lSpNMXc7yb8l75QahijKyughfTj6Kmodcl334bzoA\nCHWDBS6UAg1wWIj7CFZROOT0Vqn9E+tBMrlg9JknGIewPXCOcXgR1BwLwPTc\nBHjvyQ4lSqL0OEvAxMKZNvKYRAIkBIw48j048AQc06nF8ZrVl9Flsg+hzVo4\nf7elNEK0LdYS2bJWZWH701OS/Hqvm6KERxlDIjeM3Oc/HQz6mVEolqkIcJfb\n/u4rMKBg7n617ClgRLi2nq2ID3i/5J7+BAsvX3Hz2XNMRv1lO/dIG/k6LWgZ\nGEPcVb1mResNEoY2EfPWWsiiGMdsHmw78fSlrkYSQdnRRjAR2Vh9KLjMEBL9\n10M1\r\n=2YDq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUuS9YWxEX0zmBRerJMSV07rcffPJI0+nMgjNidBE6mAIgVl5Vjls4/8mhNxWAcAXxSZEUiC+lZBhfTmD0meFf72k="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.21_1575675623075_0.3573526755776808"},"_hasShrinkwrap":false},"0.13.1-alpha.22":{"name":"@react-ssr/core","version":"0.13.1-alpha.22","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c8a4524865a0f21c3eb027c1ab9807d8655111cd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.22","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-wimdYvhOVYpCDDfw+3Dlqpd5Gh+mXMugHW9iFxBRT03XRweYPsLOAh3s29rWq9aqUHf0o3yHgDYLTGcXFRc3CQ==","shasum":"898caf5c53db6c918afa18771177a7623999e840","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.22.tgz","fileCount":27,"unpackedSize":204987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6upmCRA9TVsSAnZWagAATl0P+wdTyrznsVXRNU0x98gS\nTibNh7wMRqeOzFn0abWw6JRqsvSqMmryamRcq353IeAN+8/pAZzcM7SoVrBn\nA6ib+KgFJUBxKqPThdLvVwmM1SLM32QbwkK6ZKGioUfwWb3akQRxyN6x9Bqv\nu6nN+MvhC8hiMe82dtPg+6+rn3M1a/YjQahkTgHuUrb82xguV2kxCbCeQJ/e\nfbgh9lqmXnA4ABLpZ2gS2PYW154rCv3Sa4E/8YyLKgKqi23dsZ7G2ilQumDJ\n43d4MyCCTd3/L4pSLu5VM4YNNL5qT9que0uo8RPsxBom5kqO9c+AQBkfOJsJ\nXWdMFBoohlR5Ey7A8Eof/AD+5hIOBvXRoKnQgj4MQ0oZAjTAaQhEjv8tqdVj\nbFIAyqwL/EqMfvzjYKXQUDBo6Wk+rL+4vqNgMZpkuZCpwTWWStaPWFHL25pA\nLUAuNciS3rUTjWlZaSryYqeAMJ0e8x7WTSJfjI/K5gXOfF5uOCxuqtq0W9ly\nGMFgWOThXmark9BEg/osvqKx+aJdIK1fKRomWHLYQthQceXPeivi0o9dX8eA\n4/v6NdTFhNCkFFH+zma9Pkhk2kMLkrvnQa9TrytcUznbZOLrTUGpAm85hYS3\nFoumb0Li495j7iiLA/HgkGSa8koFlNvUQ+7U6B99A+SAfNvpdLeyYZhcGPJL\n1Qey\r\n=MV+Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+J8j39c3Zn/pV891ttg+29y464rug+VxAioRymcwmnwIhAOvQj7UGFeCYKcua71np34fkhukehTwIA+9Iux/VQSFp"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.22_1575676517850_0.4261349466026121"},"_hasShrinkwrap":false},"0.13.1-alpha.23":{"name":"@react-ssr/core","version":"0.13.1-alpha.23","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1dedffa5b5c72ea7a39490a698d9eb05ebc1702f","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.23","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-vzfe1UAOfp74GLQZlH+MjbGM6Jb1cxXJQybhPskhk6KzaULDD9eT6UgfJqiO7BASLsHJfzbJUY1C/7xBehV7IA==","shasum":"335ed0606fdb1adaa8e8e8193ba7bf33d09bd0dd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.23.tgz","fileCount":27,"unpackedSize":204993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uugCRA9TVsSAnZWagAAHMYQAKKGWbgnHHkeUL5D1ZpJ\nj4uobZki0Vd6Uw9fPF5wmhsMTdEXroSnJEzAogUUPLy3wY8qOUwD2uN9OF/x\nLpBYxkVPkmTs2oPOSF7CPMWjglAOKL4X8+jykw3s+oFHj7sW+8X7V6rl/W5w\ns72mvrgXLdJA3qKKGKFehdwP6hw7DwKM6GrGhHxdt1LY0doRv/OLvsJa4VV2\nEVWMnagd5AUnXNGHZi+TMRKITdz/FR3S/g/7MYmjY6QxjW+E2csrZaQHTP4k\n9dYpl2MzC3jdZPokt1rMxtQPmRPrmbEmQHQHM2aaGmQ78kIsLZR8+7NC1jup\nx2tlg9I0L4Ow7eqzPOTYcFY4gOrCgdIgubA0rfYPSDYLJBOvHFvNfkHruXQ4\n7z6lzvA8CnFIQBcgahrUMy8r0BvEO/l4NTuB30xntSNxT4UOb+PYRTUIJKci\nTzz/9E3RyAHKabts8DUM/7aW1IHUPmnhg+ge38qwY0/HDxStaDxbxYRBsVW8\nVrLcfbTk2YtlC5tpjvgRaTx6HvK0WBk7/2hmgxMZ0xFBUpTBhgs2FOsGLlvg\nQwRiu7+mMa+2rAg16gwSSV7H6wsmmYwOoY2xkUVT2DU6giSkQfQ9LGHD1gxt\nc5y5zB9O7OQ6dS5sYmK4nOYPYK3gOQpbpGXX1j+Bt3cKoiPQINb2p5djTLoI\ntc0Z\r\n=Nq1J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMcGGSaCBfmZMJ45lYBgWW+x4JCuq0c2QzKrJ6jOIPwwIhAKTLdJ70Hv1uSs+IZA5Dxy0ThqLd0zgq25GQ8KEZi+Tq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.23_1575676832326_0.44452625452402694"},"_hasShrinkwrap":false},"0.13.1-alpha.24":{"name":"@react-ssr/core","version":"0.13.1-alpha.24","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ea6ed39cc27d6b43c533c1665cb107603be70828","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.24","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-/hh2TExC+3GmLNMfbHNuXpesHybHM/Uh5TRL43P4CvlqpFJLTKRaNLbZf0UDW53Vy4PTog1jiz+xXgG9awfTVg==","shasum":"12d7e9ae25718309eb0352735a9ff1e6f1296e2f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.24.tgz","fileCount":27,"unpackedSize":204995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6uy6CRA9TVsSAnZWagAAi5IP/jHC42qmdbJ/CYxw+WEV\nTg8IwkDM1/ny+S+6ueqWDTu8Ca6SaBmwVXZzik+mKcLC7dgEW2nCe62IoYG+\n08LGQn1svtw9qq20bVCuM/AsKaiQlY1LKX65NkI8Hd78ihbYa9j7rYnYGcWE\nbIfX8QtbAcWaH8NhjIfLXVhEQWl2KwEWD2BxMVYTNSTMhDhq0mPobShcB5qw\ntlMCRJ2hNhKsSXqhLxQMU19mS8p61tiRmxNMecbQy8R0QJTo1V4lNFDmpy9Z\nWUpczsGuNCrAkvntJojFkSe9aU0R2ENaOaSgYtguF1Ucf9LnvGstWpDsMa0r\nVc4dbhhUjCFCeXfZi4ht6LmhoAAJZzJTFP21bEkioj0+ElqC6cyjj9YTEgUp\nxiI2xqhbdeA0GSSzmt10LX+LLHusQKYDw1btEwTj1wPQ9PmfwXJubewllboB\nr9+H8UtQdg7PtSG8SFegr2Gtg1H2FK+pZ1rChE82AkAJ9ZBYfpxUJa7hYFJz\nMDfRmrH0e4Zg7XJcRZ9wP/Wxo3tfwRhjs35EVvWgeSbLk31O71bWV34k6SVe\naQqcWMklAB+AQSdbY6HGF93jOloEPlLQabo4jVqEAbDeYpNcGYfSI/JAhXlD\nxzM4P4bz3p6rC9v+uGt6hd0BM1P38o/XPYoiE7898b4ffCN+D0DKZ7xOu76x\n1fLu\r\n=89Il\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMP3ErcsffH465rHxveJ3+sPikEEHQmv4+TuhgvyenSQIhAPFdZEnF6qSx7hIIKaBxPV1e4brtnA1vupBctHU0ZPdh"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.24_1575677114304_0.3526205340788011"},"_hasShrinkwrap":false},"0.13.1-alpha.25":{"name":"@react-ssr/core","version":"0.13.1-alpha.25","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"71b4166c1ea9ad5132212b54576e2ae8abf9d63a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.25","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-iGcAtqBHNhJR0LT0FSf3iUQnqS6Id6apCQGNXv2CbgypAP8gguPVCRaHonwef9hRXuUMt5+9J0pioDUGeR4+pg==","shasum":"26572f6f29bd3254c69c4c50b0215485183b4413","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.25.tgz","fileCount":27,"unpackedSize":204987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6u3cCRA9TVsSAnZWagAAb5wQAI6XaR2EPPv4H0Fiw2oM\n0S09EbSLTqaHTCEND1DBoVcnkAYcUsMAV+50cbem4ukZ1Ry6J8ZU9Guugm6X\nczNGykOIjEWE0hNDfVOrOdkx9iayc0PiBspz/Pg5k/BtjixT/fm8oJiX/XH9\ntNDt/k7Zk2TBzkcCLipP2817CVXq7NrwP5l4gRtYGEdG0DaUHV4Cy8u8+6OC\nyQYDtqTh9ZXAxDK9iQJl3Y77q2ZmBaQuE1OwyS6sGlzX1xKTSMolpDK2qDNy\n3zbJw9DTha6gcw4WSRh7UYr6/uyGEWaHdCMy5c+w8LhWgRytRXj5A4XuP+cy\nNECgh/zJC8kDZWYZbr8m8o2Jwdfx2IhxPs7KoxvMvmnN5Kz6jaZJgCFDs4KA\nnSp6ydWm5uc/9MqQuWVYXojQadMgoqK5V79Ot8W1oh6aXQT2GYzn7LtbWuod\ngEhuwT2ZIW6uaginVNwGeruWTytHXVv68EOmXVtA7lg4ufyZuYkEo+5fZbAP\n9UWxNeWbPnxcW7FwwMsfPNzx8idgGUTH8UCaSuL4GIFll84S5MfHvn8d3EWQ\nhOjBwexMdbE9B4UkiqS4z9ZsQYEunaOTEXOOhKfHWtN/oCAI96OSdV3Z+jpo\n0djdiu3SrsZ8n5hDo4/ZVEiG7NmmfZJVPonZL6JgYoLbtilgQaWH1Z3KTivF\ngLZO\r\n=1OoL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAOCqS91m9l0v3BtzsgkVM0jRpMJRL0XRwxDYDxVOfNdAiAmO28J/psaaldohgdLEYAiDf/8bYv5G7zf5tAl9z0wRg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.25_1575677403597_0.5140116972708233"},"_hasShrinkwrap":false},"0.13.1-alpha.27":{"name":"@react-ssr/core","version":"0.13.1-alpha.27","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f5a1ba0d9d1b16f41983e289b2c0b9797a75e7cd","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.27","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-R/OheQRVcTr8fvNjfgdOChfP46ZcbvaNeId9A036iTXMxNW6O49VY25IRrU7mvS04GW82wXHo4LoVQzcIhNO1g==","shasum":"fd6a9e50d9fbfe8c38e4f4a33d19a04ce3a4e88e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.27.tgz","fileCount":27,"unpackedSize":204725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vAgCRA9TVsSAnZWagAAuTwP/0ag2szCa8mTIajMXfV/\nq2eriUXYFa1/AVsiOK7+al/QL1TgnoIIdW/n5A65W/HK0/Sm7PbdpuK3CugL\nCFkNWfFqhz/xqDcAwZ29GPbh8mkHAPhhewyU574OP86iISZuFanC8tqplOXt\nXrmzWq25ChwfGN44xS/LhtU0jyx/Iuw0RjoyDqyoZ7Ppru7x7wqYkR19Zf1o\nBbwNFTfAwQC479Pwu3+UcWnjfmboExxMLNQ7uxPTLH2KwJxP2HhylFeLCptx\n1ChaOMdw69V64tG0GPgZ5zIkwm62nO9niI8Z8F6F8mHqRom5EPqaniNlqFq4\nuEpv+NT5KpqCQjxh7essnYps1uA0CYdvwm9NfeZqDxhmCjWPitvd4atQIWYD\nJrv4mzqgBlCTv9gSLuCGpcY5UWBPLcl6Y67Pt60kxHbxBYR9wooRa4aZsu8s\nVvxzSnd+wtGePgXfd0AkxSqLoEqthJsaR5udfSZ+fA3S3oPoCuZ7UTo7WZiz\n7v8hG5fqMgg7OCgDyLHfznmWa3ysi+c/3yk6P1qZ4LSQ/AmBMAEHyHRucf/H\n0QDgKUXVYXgTxyGDnQJ7xW49on0GXwk43hpCNkHLcU2BDFPV+ra3Jxh3f4D8\nqbMOzIxS/fW2Md/e0tJtj0O0QNDO4cm8fdhG/Ee9ePOZgg5lrPqyXeHWPnKB\nnJRV\r\n=iEZC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt2Z24RJ4S622SL5VDbVhbDnYLxeAUNCQZgT429354gwIhAOHmDP+HX5rv8YSdnGJndpSJT3rRm+nCyXJxbE1/Av6Y"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.27_1575677984095_0.48004608422634454"},"_hasShrinkwrap":false},"0.13.1-alpha.28":{"name":"@react-ssr/core","version":"0.13.1-alpha.28","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6a284a51927406fd99d77a2058dcf5654d015316","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.28","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-otQVUvwQxai+YjzYmyV4EqUVh+CE8PI1kZ8XyzeJPLdj1ccrXRFz+sRp3CBSEg+rhqXFketYu9cGGSkhCPbdbg==","shasum":"02b7a5564b08f207a69e671dc23fad13a5a501ad","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.28.tgz","fileCount":27,"unpackedSize":204740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vF+CRA9TVsSAnZWagAAVAQP/1RCgtkJiXhYYYnxsm4T\n71sW3J4sgX6l7tGtsQrRZS1U1SlfRcVgcgKgLz1RCHF7hR8SM0NN4xkGWrJZ\nh7AqLQaxfDOZfeg9q86YNx4RXo0Y3euH67llhqODkhW9GmE4kQ/bD6ACEN9V\nUAZdcIrOKo0mK3cWuIftXKuLYJ1LIZMdvyVn9h43CHKtQvfGnXPfwRYQ0Qgp\nplBic78Lp/D/yakaXj4Y+pUspe2rjy0YTOFMw/ghRBXTBGjpF/FQk7ebFgAB\nSD/4/iGArQwvNIWVceHr2hRZYCiofybGCbYtZnm/jy853eYEDITmmIg8Tm+h\nM+yP4sfo5hsmfQM0zTd9oH8pCcg1iXFi0YzfMlerAwUtUU/6tap4jEPDd0jz\n/C/CwvNjQ2oXy+l8hUOak3MavQ6BDBG4hLbKh2Na2MNEbB+WTpO0fhzGyYHy\nPUBVRaO9MiFpleLxX4pr8tOlPFaCYnNG6K/f9g0BRrDQYVdsIm0W8DBnI5ER\nVELPnzdmsN33W5Rid/ifjeRrwuBhb1TnAYrHcvQDqFqEzCH4Pn0bezzncJJb\n37hfUzXMWANtKQtpKBGkQCzNsbVlpcfrA4h7l2rIqK5dGJYrhfcmvTgV02hO\n461axP6glvEi0PRfLKM9n5MRv/kI5s61zvjOZjCCy5rERlp/LIfqGATVvsAY\ngHTk\r\n=nNnk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyB9KGXZx9r0KgZpbad4TlHEXTvIL8k1i7ijj96whM3gIhANlRCmh5ApCGj0pGzAQSlqhXnhgzICOZ7bj4dXKNkqsY"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.28_1575678333404_0.23617269202454527"},"_hasShrinkwrap":false},"0.13.1-alpha.29":{"name":"@react-ssr/core","version":"0.13.1-alpha.29","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ab44a6cdbc6991ec58b008a66705a7ed9e3a93cc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.29","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-AzjFUa7AqdSClqz8PIFldUqefmssiBXHqMNJyP6TkxJ+Zm9cWN0TRaQxAXliwoGerNAPUWMN1Q1Hy6nx2DIPIQ==","shasum":"4817c5d90bf4db610b8d6fe1750061a80a4c18b7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.29.tgz","fileCount":27,"unpackedSize":204740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vJTCRA9TVsSAnZWagAA7J0P/21iA69P0MTgpPHFWwgV\ntgucOYEymiweJwXfUUzHnZ1Ur0lcdmXgO70oNRr8/NMnFwdE2C0wjxENJN5i\nJKqs6joo2kv5m4RNJmEB6dInDQ8uin7evHdQrPTIsAPxAoYajEhMCqVD7n9U\nKlRQ0oI4onOWAAWJHVfTbWMwk9lXgMJ0zf1ZGtT43BIsKYqzfl7OeEsG2qnT\nnmlDk/QFjFVTfpL5qBVrasxBbZWIQZVPmY0GDbGLd426y8jsNpy1wYiIUMdq\nCsZYTZ8FWmhO9TApNjvnCmZkiwzsOV//DMfeH9exlV3r6bMLuSrCc4w6guEO\niBGgpHw60HPqaoaKMACK3Jnji6lAJSBMqr3Sgi2NA5sCP3WiKfCI8cNi8FcW\n8e5mgy6hk+B2IdTl2WbvAu+u0uodUHsmHOWd34LvQQkZVJrNsK9W1oJOYKEi\nvX+M4vI6zemA7Ma9u0bSmkT7LcQyFxxkJGPimUxrlysx84PqzinBfi2pLJZH\n1dW0eYaIkmaXB/vVQ83SYdkN5adoarIS2sNdlbb8vTK/oHCn+nooZDc6ZIAU\ntmqEtnvnSKmi1aB+L4HAgl5kAUo1PYb/rf0Ph6Gnt93DDxZtmart+TcqBmI3\nwk1aVGaxvMISyMAjTBLw0G84nXA7lMm+QVKJxcbxxKr47qywIQB3j68d+fra\nSm7k\r\n=LUOs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHGu0GawgLqhEZBmTGiDS8jGwzwIy83sA8EAMrTleZ0iAiA+vadVAE2cKPIovD4ATAX1XtHGJs1fkc11zE1zgxQ1uA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.29_1575678546673_0.4972313447561545"},"_hasShrinkwrap":false},"0.13.1-alpha.30":{"name":"@react-ssr/core","version":"0.13.1-alpha.30","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ccb988e5478062e4cf830655fa39b7eaaaa93553","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.30","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-x4mEnbyYhttAs564oD9jF3MB5M6wyz3tgpnaow6B06TXgnUnHq3Wk28PFrVGViLJOSZQepx+b0vQ1N1PdRR8FQ==","shasum":"16518e17ef5630ee44e1d78998a48f5fdff6baca","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.30.tgz","fileCount":27,"unpackedSize":204725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vNeCRA9TVsSAnZWagAA2GMP/iGgfV/ybjg8yOqqYodp\nTOD6JBCjhTXtgLdYNA3U2KetsTRYBghf4fKEoGtlbeOog3449BgcDHYcu0ie\nxhfTY7QiBYpHgIBIlv5vI8l5+il3y18+V0T61SHytzlO4RnBEl3lH1Ac5pdJ\nPzLUiFihJpYHE20PpYbYp3FwMMps6LwuRLOXi1G72N64b0qwdQA5gP2m+vEQ\nLxEuMA854aIKlxTgwjX3uqd1LEmXoRPZf9EmRfn42WhIp9gxYOcZfV2Uncpp\nH13Arm23i6TEd5slNHmpJULMS1GgTPjKDkG8bn78aNp5J7+WGwLevcuYUxjM\n2DzML/M6tX3nMr8PKVWLElF8ZEjK/F5pNRRMnPlJlQX5oBIQfCwQYI8FpGP1\n8HljxaNK6e1uGD5geDeVH+ddzDGcYQpJMd/ReQpvbdjqsgTamkOuBrRqchhB\nxNLloU3/k9lu46UsfT8lrSNiNUhKZ4alsuwEX35esxTg2cOQ/ZLBD+rF0PHM\niXnBbBAKwu8oyDb1MJsnvvfFzjr7nQQ0xTxjHzjIQU3naxX8RsU/6hQxFmfX\nGb+ImJvtLKgqobdgJZ9wQvPCotJlN97XLP0bES1CWHufUebpiloUdT+Q1KIl\nIWGDarXjKcLM9BkKyini6VhG6vkqR8jJV1OlmwYY6Sj+UKQ5NNweTFqJtH30\nX+d9\r\n=aqNY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOGyAPsEi9ByN3iEvYSxDnZjr3zEV5JAUYAWQpCskznAiEApx7SSpuO/wgR15Zg4DhNqbM9zdExqrEoYsQcV8LgMRo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.30_1575678814315_0.16640035621492366"},"_hasShrinkwrap":false},"0.13.1-alpha.31":{"name":"@react-ssr/core","version":"0.13.1-alpha.31","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6f6197af8b68c0b0e8210866b3d76bd31724ea9e","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.31","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-VBanQoRXRUBKLC02FufClihWhEUoOGMCUVflbfAMbK2rIh9hv8nsAQW0ziXramIK+mcbs5ZQuvKdXwbK0ZY+Gg==","shasum":"5f4a195a8291be690d65ffab806c3be70b1a9449","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.31.tgz","fileCount":27,"unpackedSize":204725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vSaCRA9TVsSAnZWagAAQIMP/jUCp3FXMyuWnD+cansN\ngjJK1bL1LfwbMHQZ+CBvfLxg7Au9Y+lTe8EXLshJTqtsDZSz8VcupXtKwCGe\nSzdE5dpIp0Bebt40rH4YMbejzIw4bVReW3H0zVYSXIDFz8RN9QZRE470rTFo\n4LplgmjHxSGi4oGbt/VdXGOKxrDPisbhDCGX5oDxweCp0pExVPSui7yGkJ+a\ntlICfVNp792F9CHltwvEab80468RpAzqEpS2LxQwcTHxxo8y9jpJ52dxSAUu\nKiLzg+yzws32J9GXxZRcxsRVl068N29ub4kFN70SF/05do5VWR/y7tLNb2Vr\npVhNaxeXplXZ5FZQd//ZVsHCLMSJ++jxbwhlsl5xy28kfeImw+kXg5vBgmhV\nHtJs9Qlx03gxJzMnGTNn0sAL7pA35zMw+izLZ6JtE4H2C7+VS+VgRte1zYLi\ns+6kL3554TobDoSxNgNInYyxddR43ChaHNtJGmE1d1Uj9N/wuhgjZfuaVYQP\nrnKjXpn30CIWwJNC1SbowZ0mTHozG0i9Be8E8JblqlpODiLD3ctFgylGCefV\nqdx3SWJlwB3iRjZjMYoVs0jwVHuk9Awzrvnx8g3jNRzsYgFeTR6W3LitQ7we\njUFhO2U0etvQpDVMzEpPyJQQjjZaf6GYM+BblhgOYu4W45YC+/ejR3viik1O\nb1FX\r\n=OueY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICtb0JJiYyGiMXgsMOTwL395X4p9ngZaoQbxu7q6hHWlAiBQGM92K1z0d9dS2fbhmm0fIza9Azcv8r4dGeLtOPGDrg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.31_1575679130444_0.06103000881753351"},"_hasShrinkwrap":false},"0.13.1-alpha.32":{"name":"@react-ssr/core","version":"0.13.1-alpha.32","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"add9d7af494a613135366f60ea3a733a859536bf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.32","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-KGd0i4JFMyQpnbXuidxrqUiQsFbUD2swjQ5uRYknrcOpeHkujhqSbSuV+kKZmNkYMuvSNUcqgLJMvmx1iMIZKw==","shasum":"32e6661b216f9817e1c0ce32cc835378d47dea1b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.32.tgz","fileCount":27,"unpackedSize":204804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vWjCRA9TVsSAnZWagAAtZkP/0Iw8pjuUaSbHtbt979s\nM8VEoPHb2tfHw/EWycnIfoHazn+VrZqolJSLGUyZUxrvmQj217S0hUOyVzT2\npgpb8en8+kGYGmHsfG91zgJS1C5xqzRDZ2F5n4iwye9YrJb9UwH8AHuLyq7U\njxl3LXyw/GVgqZ8bpqdoLLWGnYvQ992F8Ru8R+Uuujb+AAOIHTSY8UplKf7u\nX/DUxbpmp7xZBxnQP+lns1T6yRFJBGXpMxg5YKGy2bylww27AZs8/mFfYQwX\nbpgBc7ounOlCc5MRqpayOQfrzFMyDoRuCVNmfh+lCN2VA8wdxIns6NtrlncZ\n5tyZpOINIyeNX9tFCfXvpTX1gPCtEExLeYlDRyhcf+sqfkGjXu/BUY0oQEnt\nGuKOdEpYdtY0HCfNQtGB8/sgum1goYXSiidxJHA7OP6ROaQ2s0A94k9euNCN\nDZmIRZNa3zvFCJiQkQ9TFz3Y2HJ7mhse2z8y3xJd0iiIs1OYrc6cRhH/hIE8\n+klgaVUwjFMd6v//4jQCi0JaC0iLk4GepASC99kljWyF3wzfGu+fGR27dtfC\nSerLY0ngPI/lPk7SSbABB2ApQkKqmKHChZn673xglGY/exH6DCOo8A6Ym6+7\nf8WIn1NqO5jMwrO2bpqIeBL+DHdKemy47SJQjLWQAGCdVKGXHmaoptDwlNnk\n9o2q\r\n=jsC3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRNpkyC3PucKlWOQydDrxHyveTmsm1RNCPLTLdngDzWAiEAwGnYN8SmmGybuemwKyAr7OwwbSxzdQvvOiU0DXOeBcI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.32_1575679395125_0.9678461614165237"},"_hasShrinkwrap":false},"0.13.1-alpha.33":{"name":"@react-ssr/core","version":"0.13.1-alpha.33","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"29ad81282165594a0b072ba3024271ac3834afbf","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.33","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-NI1/zqXRdCSUXYff+5czoq5d1NeniuBLsE9yxgep5YtWuno+QvGP7IGzjNy08Id4/lQCbhDNay1AXxpvNyBkxA==","shasum":"75878f74472cea7fca2dcb73c280589838c6e17d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.33.tgz","fileCount":27,"unpackedSize":204804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vZHCRA9TVsSAnZWagAAN3gP/jQ9HV2yDyXJlekf2zty\nSp7ji7OI4/wXrcc0WT0uX51mwVZaNZ48cTuDaImI3iBNoL4lfPy2uYmO72fh\nL5ZxU4tVt7n+/+rpkxoF85MRfCVOAZo99tT17ejsGoY5pyJHXT58EW+GwTME\ndz/EQJaTy0UZqptihqfAEAQyCs0o1sUTeTUV0u8ouNxVawns/m8Zyn3mFJfE\n0rdiIUUa71UJgp4N+sssxQ2KjDRQ578qbxnoNd6EkxFbhktfK1v0hBn286Ms\njYssjqQNT90ngPPbDqsQlLjjpV/FE0V1rhS+ZyhvLmEE9SCcTCTy5i2HpUAm\nlsOzxBOWsuItPinFwzzjY+UJwrQuBwKDrePf1fLY6G1MnfB/80YXNpQfMLYU\ngZs743a9E1j9eAA3ete9RE5WBnzlSK75nkLjRjvxTqU/P+dWTIuWd1Ua7Ad0\nCfUaTH1qIKdsPG370B9w5gP1JQhCvULechpTB8LRlAsG2LMZPyn2xi5DTN4k\n84TSI3ra9jkGrFTpywgM4/vbsUPKOfMqDrxhz0HFIsMyEfEwHf/byiI2NOtp\n8CPmebLEkQFGJozjD82zuis9nlKjPdcf+xPZhPrPeVrK72F0J+4ZAi1ePC7K\nf4Ny0hHcjQlOsrGm5KVld1jTxosQlMagaoFpJ4UBMEu5FCL4EkAquWYItV5T\ng0UH\r\n=N3cz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3Cnqr0SSHWkLLsMvtBZPYzq4K4MEELhtNA9HYZZQoAAiB6sIXvN+/6BFNHObGlo7+Ig24eK7VQ8OR5YaPCNU1bvw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.33_1575679559425_0.29628399367040337"},"_hasShrinkwrap":false},"0.13.1-alpha.34":{"name":"@react-ssr/core","version":"0.13.1-alpha.34","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0736bff1f444ec16a81f96a6b70c00bcebe25db2","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.34","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-/PehiUnAEqCilQXBeLoja+AkgG16mSSQqPF55J8a17RvgVUnlgJekLijyI90OuhpzoDBk7ngN7deGRV+9xanmQ==","shasum":"81d8c2a04bad3a8692dcfa4b6f839c6d066c048d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.34.tgz","fileCount":27,"unpackedSize":204658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vddCRA9TVsSAnZWagAA0P4QAKJvfhJXmxDVd3JZnRoz\n9gkOCmy5FlqH9vSxwIUNzQAixrs6cyQlJCk1aIpeZwjp0esoHXOQNNk8DBeG\nRrY7kDXNFU5VEeALb7VWwbmFzMYbUF7Tk8gtKSJMs70n57jupfY3GBw8M5oW\nzeuYAWsPBpiNdy2+oIc5GcpPfoMG0l/Y7kuXJHpDkgmI2QNT2Yxe+j12rQ4D\n03CiLNR808x6jtL16m/ktJcG6yp3FvAQzHsktR7AuGQJnkG+f+OJ0q2XU8IR\n6rzakHHaQqk6PFsNA2Qo592Hy9jIAmwbDecD6sqyT2AGw8vG2tsObY5FMR8x\n13R7lR+cQXHtQJUURfDLca1gm/sA14sw1ciHjImViXKuy5jqA8XkCT0JkKjj\nsme6cQScnYBPYBEpfzIleP7p5pG4yKu7PpXtJHqjqsbUCsA6w9o6xEa6xtJy\nHGhqM5zqfz2tdm3FpA1z21XH2/9WIEt8I45dtmX4R1GOTLumaDig/nGCIjWm\nVTNsjlkBiR0FpZAM73nEtf0WmGz9wfqlAqhIWtBvk8Wuakz+xUStWyXBmqIT\nWeuQYiwVby/Xpmd46d7ZL6kKuZ+B5JalyejjKKYkFBO8COh2fpN5R4yFQnEy\nnHS4kb1rcROIsVNdyug538ZT9eAlXLg6cvAH0XEZ9Qv+ijUpTkSAq4/gvJm9\nhNFw\r\n=kE0a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAs4rtKhovyzD7zmlOIDxaeHT3amU3A+lWFPHDnGXNK0AiEAi0e1UZkPZQFh/JbAP6Mh6838EmiKbGVzPHDupmSLe/k="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.34_1575679837456_0.5343888066770353"},"_hasShrinkwrap":false},"0.13.1-alpha.35":{"name":"@react-ssr/core","version":"0.13.1-alpha.35","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3f5ac8b52ca625948e9a6317c5e1beec007d7c68","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.35","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-RTeQftE0/YsuUQGbJpT6deJslNXW4fHMFX45H7nEob7M0lM+YJdXKSGkAebWOLRSxsgfgVN35XZq3yZl+nAhGw==","shasum":"c2839b6a6b70c470bcb5690936228578d3955bc9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.35.tgz","fileCount":27,"unpackedSize":204611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vehCRA9TVsSAnZWagAAZkMP/1o+ARxbe0sMdx4QPFkE\noAGB9u92oXAY+LLWSdRVZiNHRXMsiW2o9Gk3P/+0HGrKVBzdxUmq8rKfPKlS\nr5X2E8l6tt/n3KHt1Uu82MbSWHmNLMpbWqoqj8FI9m0wfmjjeIFzull6jg45\nt7vJ5a7I9m8tm+iCNMqyB2Kiy4f7fHTvxM5r32XRcJjyr03PqHC2VEorkT/h\nNwo6++bKPEo32lwapg/+rNbKg9YJfL7s2bo1loejPp7nWoIKD27/Vqayksq1\nP+oil+pYjq02k0oIhDQi4duIenrSuUbXPnoQuccNzJ51F+0bx6jULv4dy4Mp\nt12pEUDHCHyXVYGuwbLlLPk4mHwii102keOFcoe8sd8YuV6nVrqlh+SglAFl\n+mhDlYOlyXI20ekBC9xLIaA9qKEqCXoc/eb9Xr+1kx2wvbLLnN5tDlXB+cw6\n273kkPFggrOeWIl8GgWyXSL/SSYBCcaivIqsDSwgkrg5MNXSb+GZiBvrlxeM\n0Hza0bvol76Bc8umydoKL8oKEr+iafZ/rbiJKFk6eCrHHZDQ5MXNzs+ixmcK\n24XeX/fSDV/TlJv1N1iKuD60nOltdv5f5KJFjF7qeuzZmbndKlLvGPf03KQ8\nYC7wUGq9ZUjhGDAatXeUi0QtZe4x2nLmzZyOemWxR7Wd5VKButapM+cEE3KG\nYzAq\r\n=1urz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVSMjHI6n7OzFjFsMyEsx1Wub/jvgso/6koxhT32eU4QIhANJfWA+a96CdlMQEe4GhU8dDu4NJF0c/JAboRvZdpfFg"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.35_1575679905001_0.7204191401573528"},"_hasShrinkwrap":false},"0.13.1-alpha.36":{"name":"@react-ssr/core","version":"0.13.1-alpha.36","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f97a5ba982324d6732409d4868e559e70ad88753","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.36","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-/9eZos7W0FH7AYMRUKKvEeqT/uoZrXdylo59UxjjcHS2Pdsfb1KKJ2eJqDnujWE+/8NOlWkX8EaUJ4esYA4wnA==","shasum":"e27ef5d6127c2d37bbe883ca3dd1f44111f6f1a6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.36.tgz","fileCount":27,"unpackedSize":204757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vicCRA9TVsSAnZWagAA12gP/ilwVypMSGdts3CmgeyX\nGz0EQPHl0SMXAXKu/H3GQbfTC+NDOclMHiql50Rvasp1fhkxTQ6t6ETVDHtw\nvrG9TNCtSQxVT6olmCWYFT17bqP1PPwwI1PmtRX2CwEcktuhHBgwdLO046jQ\nSba+FnFlwotedCt/qTvlCK5eBM2GEK97unKer7eIqGQJxFfMChMC/+HzHhLP\nuA5LfqM1JTK4LOYl7lQc62y5DnWxotRKyTND03FhIkkVgabwfB6xaXNG3tCB\ntBuebXg5JFpytCtxQogIxder821aeu3oRcw/Elbkh97evsP1VHdlSPKU0XcV\nQC58WiOBMSV86yh4bsciu4MlL9C2sVpDL7z25jPKHzk78LRUOH9yhyNt/gz+\nfqxkNLvrno77SwdTEatu4AvdjlowVof4J3HZTiyrHU9TUWsjsi6gKk0AwdwO\n0E7S1rLVuWDhOiJRkbYyj4b3YX3Qa9Ytst5XzMTOrN1fctLDvF4s4stcOBgV\n3hLdpPXqSQj22J7IfrRKJ3DmAgo1ZHG1miIP9ysAbrESfwir+qd3PO57GZ9E\nvFckRPJlNKiwEoKf/ZVJ954HmSpJKMFvoGzz5c/3Y5gycU4ue9TIvwKPdVT8\n1iQPy2S8sKvDCOunCzEa5Mi0C2whVUnfxbh/K9WZRrnjfmcQ4Lok45ZO3dJT\nw9MA\r\n=F9Yf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmua3qF/BnfQ9fkWsUxFtTZo6809kb7wDlzaRek9/b+gIgHFIZ2INfUec7wcHvVDDa0p/3EFTp4xnIkgShg8EpbPc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.36_1575680156507_0.6188473865415454"},"_hasShrinkwrap":false},"0.13.1-alpha.37":{"name":"@react-ssr/core","version":"0.13.1-alpha.37","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"735a45853b93ebcacb5c813ef7f47e7a1de0379d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.37","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-Ig2XugZSyWYSrxT82nsooGhdm+zG1rzv/8Jzimk935U57bKeESdHtQLXxnpYaoVjO8uW9G9CVRX/si7M5fvovQ==","shasum":"9ede829102f5cd3dd5bbbabf0525a519f69a2724","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.37.tgz","fileCount":27,"unpackedSize":204757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vpFCRA9TVsSAnZWagAAxCUP/2WUlJ+Vvj+4OM9NiDY8\nqIyX50E8/0hRpZS5aHla7cmdv2JSR9EZKOq5kX5XgkkQMWj064jQ5lP5cIhM\nKUxpboMEbuq6bQ271CHSL48NaZvye4cGWaOc3NRbVwvgLNtN0p3TnjrhVtOR\nvqVAcsqU6/4KuMIv5gsBFxwDcJCMbHy4vIGFxc14O5Pvdi+Qna/NUxgMbFbY\nELWS22Lfaw0ro5ePIeCeRbGsHS1zU/p/wFNtdvSk0Cr+DvOjsIqYiR6ksC8T\ncHe583W/+nEfIfjDv13/ApGzA2ArU0xCHMAIqfIoHfcL6MLUQM9WF8tKiHlV\nK/ktRA0I1MBq3Zig5qF0IheE9H5bAzn6H58w5svvF6MmUosyMCErudWmFvD+\n1qg/rsx1WSE89ESa5NH5+ytizuro1FqMxqF+fYgzcYXc/t2Wsw7ju34yJYx6\neovRvpXbJoVFA/YcfuWZ9+tjfNFKfQH8ks2NQoabQtyrGyjAOw67k8YQrgIA\n9DigI7V5lzLMo8vZDfYfIKR5Wwyc28z7SRpm7LKbR14cPmXLixiGFr/EA3PX\njPM1cOnweWsGtmFNtvBSHkjAjIXq9EziSpk7WDm38Qqk2iyLV4Z0Oqe4oVR6\n/uIuKDHaxoStBaNH8mO3+zdHgZDNN3umTs8Cu7pwXeZ5bEtDuy4//vaixZh7\nf1me\r\n=IwYS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWLX3Ew8dilFNZNssV7rpZlnyX4Y8eJvLscuVP/eRIoAiBy7+OYJKyxQwHoGnKl7k/Cc3Fp7/6gH/Fmep3QCjYV6Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.37_1575680580248_0.32997849518829603"},"_hasShrinkwrap":false},"0.13.1-alpha.38":{"name":"@react-ssr/core","version":"0.13.1-alpha.38","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9a94fb606d445f432944c76ab05a2f46f0fe79ca","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.38","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-xxS3jmDAKV+07QXO6kG3pCP0o9Egdio/C1clccT86vUGxC5zYrf7NcwO5Nqgl40hEGAFiBCFvj1RaHhDS2YP8Q==","shasum":"fea74ce03016526d12dc919eaa6548c9752467c2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.38.tgz","fileCount":27,"unpackedSize":204757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vqTCRA9TVsSAnZWagAAv1EP/2LfghFnp6z3Bf85J9zF\nlW59rAz206FfBg1TnneoXleJFRirIhfoYpaAfI2ZhG3/xTTrR5JieHLTUGdw\n17x0+n4qXJ1ThTew193NTHwYl30DmKmcaFaawjdx2QzzfvSpvAS3JLMJ/GkK\nR3iiToN826BBSrXEORlPzdUgUDSJ6YEVSQe7M7eaNGTi/WQptHEwoHhlaiKH\nJtA78+FbAR+F+jJFACBLTWTckdkd3Mla0h0nmG878pCD4iNENC9IZHWfoY1g\ncXIeAr5bShOX5JiIqT1SSB+gude1lyAMuM+7DcoWJVc2eEtJgw5PpP0dF1jK\nSRxlvtwtslgGy8G4AwK9IYbHkaMvveNZju6mNJQTIx2oF6iM3VIy6VQL9DQz\n/bBKu/raHE9hBQ78EdkoYWhc1APSMWuocbh1Z7xzg2IBpY435iPgTklDhCNH\nnBuPi/KqUac9Z5B3y+ialONbinsO0wgtoJfEz6lOu1fszqVJad7QWRmNSxf7\n58LJuxELNX+Fl7ys7BUaXF/IBtxnwY4IAAYyWo3rf1HIm+ycabyOpwfUjhVq\ngY+AoPpLLdjxeOPyP+ia0UgV9TjwVmOY5C7GPHKg6eVehYOqE4ihVcQuPPyI\n4Vc+WJ3WI4QtPuSLvL10KUfmVSwxBJG8u6yAqewNonqQnTl3pXIMD5+U3j3p\nkGOW\r\n=Vfz+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFP8mjdsuqnvSurREH8NSorFaZ1EXN/jSs3OlnFMUeciAiEAu/FDVnWhRbkUBJLbS9ULHFf4yzhfN2eoIglqyuuJdXI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.38_1575680659142_0.6835957330428781"},"_hasShrinkwrap":false},"0.13.1-alpha.39":{"name":"@react-ssr/core","version":"0.13.1-alpha.39","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"82babee842a002dc597efde14c5ac7a3da7c3f13","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.13.1-alpha.39","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-OfprjJgvVRUAbbyLDYkJ0hvjT/2R9KENVQPkJlkT3Ad7D3i8KJjUiGd2KqDxHguP0R1JALrLL2HjfzZPHsVGZQ==","shasum":"cbe4bb07b2a7321b0a1f2a9018081900b2817761","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.13.1-alpha.39.tgz","fileCount":27,"unpackedSize":204757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6vu8CRA9TVsSAnZWagAATGsP/RCRWnYp2LOS98RJG1im\nnfkC4JvWv3+uELVpMRL6EmMlgC1MTMlwfbAb95sNeDW1BLDqhY4vap6BRhnc\nUMK81WR/GFI8MdoFwrzR27434QTwfmt3It7EzVJQZcVwaBfm4faP1kq1pPVp\n8sWRe88zUPfapV0CDCpvcUf4yg+A/H4oiFKQw6wqCNeeRSLi8CABCW4VYd4O\nySs981oLa081q3/KblkNDEqQZOubHs4K2YAsuV/RAN+ctMaBknXcva3jghiD\nbEcisR5+gYeWnaeKE4wDN3GjmrRTOR5K0frnarpiZxIycxaMl/7CaqyJXPW3\nvxDffzseO1y/ycOVunN/fQ24lODIYkkX8GcJhhAvjTOtuWPe7PE8Z3PDun4t\nqNWW/uV4cit0ns8blWgaDrdJKmjhN/Unod3qXci5f/O0A1ryfE8yoXYqq0av\nXQQnFujmVRYbss2BRKGs3XWQbsYijlM39L0m1hg3SMg2o0G5YEhD3PO/x2G6\nQdCUjRjZ3J1UV+aDEOVYFJ5YNIgAzohNR61vDhdZd7WHdC5JgLCyDALE0rMp\nDcUHU4InBXThT9/vUsNbDyW69WUvLKwTpodExnPh2N6QloFkyaW+dLUVQ+cS\nmAONGEaxqEH0NZ2uPEP1RwR+8D16LhxzD8l1266T2YT2EWlIaQQayx/jJue/\n0Vin\r\n=GK5d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwHtYQAX4c9rxE0aAykeRiAJlnUEkE7BcK+UfGf5gTgAiAc0kqlkdjpVr5BHgjWEemXB/Yk0WdM9YUZp6s0vvndKw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.13.1-alpha.39_1575680955567_0.49491213352150476"},"_hasShrinkwrap":false},"0.14.0":{"name":"@react-ssr/core","version":"0.14.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.5","@babel/preset-env":"^7.7.5","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.5","@babel/runtime-corejs3":"^7.7.5","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6db9e90b6aa984fda996bfed54fd5432a60f7b80","_id":"@react-ssr/core@0.14.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-nM3+trjwCirrzVEAiNNHGg0iA2HSKbcJ8oaL5+TFfS89Ns++2yYkFJCGjLnZ2B3uZh2IjPL7W/2CZJJexnEO3w==","shasum":"2245e74a542e7d9c9c326c6773a3bedf6552df21","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.0.tgz","fileCount":27,"unpackedSize":204740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6wFuCRA9TVsSAnZWagAAfbAP+gKVlpP252H36OzvBHrM\n2O9gHGRb+PGeMp5/7zg04rI1gHPIgqFsf2L3eBIq+3E2LD7EfE651ZljmhCj\nvPMNOEEW2qZD13uTAcxEt4iAAKENkPspRosn6SIFSc/EarA32oWsXYcGs5JE\nMGZLlpmM/HfAqNYz0N9ISLKkNS9+MRCGlGoiYc67cH3LTu23aMat1CvJCfMO\n/6GjQN5M8Coq0QYBgE5db00GTIrmoKSxdMZq0usZftKZtpS2cto3gu6RCeTP\nCEoBVNB0VPRwh9i8KBQwnh1oz9GbYszM4j4lx78x0vyHgTj8vPQJIzMh8PUU\n1AAd5DRPSnahth7d3oqa18919XO/8Y45tg0No1dwkpqUiTdul8oRiL/Ynhgg\n0JOg8+BQ0olEnbtCoLa4ugWIyiKd968+1d0GYID2rxIvFAfwifdkqC5zUW9H\nzGqXQ07IqSqv6k9PHKcsPWgF8C8W2QdjDRXQWFOorMXFT8f7UxT7vCbddo+i\npz7vj2/NaeCPayT13jTQgKg3Ri6411jqCD9XYkuyC4LNNn1F2vexxUpil5WQ\ny5u83xDB5YqVRjjWvfxoIcvoh1qiRbq4G+GJeq4OqUr0OvNrsBPvoRnbnNQv\nfHx2thI8gVYRWUV6iFROS8OjkV1yZ2/mZBUZLD25UnZMXbIgzqZ41+VZZiFA\nRot7\r\n=fe33\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjXQcjC1nKF0vF+1ReQoKXdeKVrOPWikJJCeOZFY9fOAiEAl8JuERfVaOhqr03gbM/YS1aGLeRluekrqLljV+dcVw4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.0_1575682414442_0.7471505317861775"},"_hasShrinkwrap":false},"0.14.1-alpha.4":{"name":"@react-ssr/core","version":"0.14.1-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8bb1f05452413a7034c2485b34a484d143ec7cce","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.14.1-alpha.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-s7kyY0CA+OQPChtR3BbXRR6lcebC8ZyfYwR+NnNhnTg4oBVRMcaFTHI+ucX5w4Ff9xhXmhgUOvUUT+0DnlY2iQ==","shasum":"a09e2475fb45bbe1a8b85989311a59d57c990071","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.1-alpha.4.tgz","fileCount":27,"unpackedSize":205089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7cAxCRA9TVsSAnZWagAAKCwP/0Bgc0zQ5hempKNr/yWx\nI5ww9R6cWCmlVd2X8ka4b2terLnKXk5CnxAnaNrdw0dXXw15UDmtx1X7ymuw\ndslGjccbWgphKnXldfE/z8gJweuyRQEuTNvscRxCU4zcA+I+oiKkLc59PEcU\nyUJj4u9FAtb8UWsbMy5ksn7YbZmyq5p4XzhemcSaBNf1w3j0sn3p7nGHKHAA\nyRDrMB9w26b0mO1P5eSkn2Wi2y2VTGVABhAr7lcZySxeJm2/Cp8hTb3s0Ybq\nv8W5ROwUrD3PPMkadcR5AUPlYI/VOWHeTf8+3TVUvHPzBxXRAQewHNs3BUKV\nnJo5rkYgFhfOY1l+JXKO4e3Xy4HMa3N1kJ9TwzUAXgwYrCoIB3dh2ZG6wnoA\nD9q56AjuRlBBgMU7Em5PzYn3xmp1aGh3ilRZSYYjtl55bbDNxEK0fTMF1Tdr\nAzqolpUf8Aw6/b0tNVlkZGb2fwZBE3KiiyoZzC4WH5JHHwqhe+dhLahGYfPZ\n8FhCa1f5m4Wj3QgiDdqXqvUjRIU4h5Xqu15ufC3wQci3SQFI4ISM0uLhItLb\nOYGQmVyXG/HX7CEMzIF5FDvBDKnKw+e88SMyBkCAUOR5Na2tsCZszB0Eib64\nELAOvJxlm8lpXbaP4omNx8bzxqi8tWCdNQBbmDG4eSBE6qJHxNBaUFo5sfAa\nD5Lg\r\n=uoHw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWs2hIgDm/jtPK2ZN0Kk+YhRB31FXiL8ZGmupptFzXLgIga60s2NPo618QVPYM0bqTXBMolitciJ73PF4VepdZC2E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.1-alpha.4_1575862320459_0.1733592818766645"},"_hasShrinkwrap":false},"0.14.1-alpha.5":{"name":"@react-ssr/core","version":"0.14.1-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"27688dcac3077bca3f77e5683a90feaf7bda3463","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.14.1-alpha.5","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-DCyEDR3mbFkarXJexB93mfUvXc1h6/w2oUyllU6duquXvgu2DADldsi1qQRITwsYJn62ORqx8NnoliKfJltM6w==","shasum":"bf51a7bee1cb9c97316db7fed2f8c0d5e5d7be23","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.1-alpha.5.tgz","fileCount":27,"unpackedSize":205168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7cHsCRA9TVsSAnZWagAAlU8P/3+7F+qE0wDv3jXXgv6J\nbqCe//dD4olKdxF4kheQ8APo7xbGwVcaipF8IHzKqQZENnNuVjH+76/F3mlG\nM6g8qFiAoOjtBx8OAnh6AOSFSi3VsKL7pbvq29xr23TGWgu2MMsSjUCruizJ\nlSwEmOt1WDZ4ga3gXjUKYxeyELRlwXgRt/589369FOpFdniRGmUA5N7fOU/W\nns+NPkeLj1bWMZFq4IAWzAwnaTvYH3IA7vkiYbNv6Dt81i+Ap+btSiRyw1jF\n3e2Fwk61gY06phhdcULerDvezPnQGlthO9u7qRm7TLMwI9MGsaWujVTSlCCX\nBz4AE4QHIy0p9FYevnuMINjggGIASQ4bKf+/5Tjh9A3UQafOAsEJFU7Ta8Sd\nxXtSXTT6dYko8KLNfKuhuI1f+MkFmut6RFIXQmybpspNwjqruwljlMy/KWlL\ncsD2uMSVkIZ0HvJURFdMtZ3HyVfi4D8Cl479p4gd2gCqjeh3zvbgsUxCShZg\na0PGiaa2hAC4qmznEYZQxm4yjeJbg6nb7KZWroAq0v4dWjz+kM9zrFum2Sz+\nFsV3DmP7NuYRek0BcFtXntl5lFGPUmEGKpCZjkm0RwhVWL8IYKjYiBOlXxs3\nzLzDuHWEgx2mBgoOw7ps9dOpjhfC6RbpEuxkP3nJvgSIr7lGl4F2ffi0Dtlw\nxEFg\r\n=hLX0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxVfaTcYicp6zDeRcLzUgeqCEcmD4AgdXIEMDkdAFj7AIgRJ4fwWusAnmq3ahM5AVGxvlNmS8csSINmZ/HDJh4qKI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.1-alpha.5_1575862764380_0.3043425659584429"},"_hasShrinkwrap":false},"0.14.1-alpha.6":{"name":"@react-ssr/core","version":"0.14.1-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a5640dbe95a694186fb8a71ea752dd30bf28e976","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.14.1-alpha.6","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-Z83sAS2rvwLSNvM34ms8CVcYO4C+CXly3kJLal3c7t4dqWGH7wSEfQzDVAZdPjAHfZXuRusrRRS+Sp223q3EnQ==","shasum":"988fa494b3e645d3181dff5af8f64e118b8f1122","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.1-alpha.6.tgz","fileCount":27,"unpackedSize":205195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7cLWCRA9TVsSAnZWagAAnagP/1U1YfV0tvBlGJP18SRX\nJgbGxf6zrlQ7LIZCQk38NR70/TWn0e8I0pEcalOp/rEq3mEdQX2HS7pHZP9c\nPke12kNvLRUlD4pUMS0rjQaHh2peYJJu4JJf8QNESe54WYcLRrQVHKSlITnb\n9QY52Ih2lpYIc0joesIvpxqpPNuCyKU/Q2C0+TKVRcxu5Lj8vP6Gs+lKeoM+\n0hZP9WGoK7PVeUPtTzCrB4Yh38BeWwR0U3g1NYMM5A+L/aOp95KzpD7wxigo\nU/eiYoecq5hfRFMIqMOiAtDhQhLrgAInhCeFfUwEMtmE7leQ4+t50ieI/9tt\nXGtdrVDShDxUx6tGUqpdlVCvB2UlRinqIAN0BaXT7MX928DMKJHYRLBIfWeG\nvEs3iPetKGGVxROvTUUr56utRhCB92OoXHVt3cRzd/D+XcSQV7h3r4Y6HCbZ\njsykdvUiIMt6n3GKnpg3jxtZ2xhQ2M6wUalvIMm6YOYDOov5BuBtQZs98jOy\ntSw2gP25TTE2GznXliyT4c7KbLVs1WB+ZzBUrdAWIj7qTRL9H2y69tfSMGG3\nn6i8hIUZdvoDy7pMmyMXve+auHsD5rSS8Pdeejz1w3919V8p9UAhZPo485ff\nA2jKke6bsxraUy+iMbbwh3lJtomMDR5hj5FXiXRjU/fq7I0Pt1HXlor5Qw29\nbinA\r\n=aDOe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIApZGsYRB7prq7xKwX7ZEavhr1/WnruZbevgKumHlf01AiAA3I958QJJn0SJk4F6eo8mqAkDEVUMWcAOvFU4P5CMOw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.1-alpha.6_1575862997987_0.7871066237446505"},"_hasShrinkwrap":false},"0.14.1-alpha.7":{"name":"@react-ssr/core","version":"0.14.1-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"75267e24453b29f574bedb66705c00a160046ef1","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.14.1-alpha.7","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-YLeO78kzfmYYGyaa0fpZIuMRZZhm0OWJW6Je1jb1OAyEqEqNih47HtN6AosiM0Q0o8fTRu4KgNaHLhzFt/cUoQ==","shasum":"1a61a7317cb7c062bad96ea80e09b0664f2b1f9d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.1-alpha.7.tgz","fileCount":27,"unpackedSize":205280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7cQzCRA9TVsSAnZWagAAcOsP/RnC6gFgNuRwOh/bF3oR\nWoMslkxfc2oBmc9Wv715jdUx1gCq2uSSpdUw038ZiubKYs2peO6QlUJmmmS2\nEou405LDeOtkRnsfjEMtfrMTDq+LgMfPwnqSOBfCrJGv99ZHw507VgLlb2p1\nTzmEkbGYBdk9h152XfkYOeURIGBxW7TB5vShrZ1ZQkF9THsll9uJp954fuwB\n91wbs+Ybfn9v8KcHhddOLh1+vaVwMmF1PCbCJuQuUiuArbJKu1Ys7XDS9W+e\ncZbbdKEZN2zS36b6Tj9iSbcD3TUj5H9l/vttL5BcNX8fPHdAmbre6M56xyHr\nv4PygT0PI48zt0zncLPDzUw2Muev9m0MzF4o6cjm6uqIFEd9liupKVtpNCAS\nshMqjxdIH0Fknj/dGVWWPrh71X9J9gxuysoeynEtm30Jt+ZJGe9TUK1w+fix\n9n+mGkRReULjfEO/dsUmDKvBLbCM5UF18GLtEmVXIqP0zZ9jfhFRVf4qQLT4\nXr40d4T4Ol3SsnioCZzlKQbxVzuZeVbl8tu+FUdlskB7/bLC4LTFIHOfMeYN\nmTqB9yYuxrj5gwn8Kk78bNyppexyVFCF1xQdkFR644v82yNJ81p/wPNyCTck\n23lmHPqPdtQrsOu4CYEFIb7GFy/DTCNa2M6PBul5yk+gd02Em3WfsFG8KlvY\nuFu9\r\n=8wAR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFlDFfEGiqS6KVzlR2bAQ9huLVQeDvwPse3Sxhue2pmMAiAa6t4iEiLI8L148yHZh9sLdsr8h/WlA5XYC+03LZikcA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.1-alpha.7_1575863346954_0.055888856060865244"},"_hasShrinkwrap":false},"0.14.1-alpha.8":{"name":"@react-ssr/core","version":"0.14.1-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a8eebb44286de5450f639b4aedcdc38441192680","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"isolatedModules\": true,\n    \"resolveJsonModule\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.14.1-alpha.8","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-yAh/cmWl0+OegBDZESOtUnTLyQsPWTrUDNIq+L3NzVtR07hjssMOVRvTMVIkq0YRX5c/OwPG0cPi/dvkQvS+1g==","shasum":"0f65cbbf2208817123d915183cafc91c8d2b4c6e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.14.1-alpha.8.tgz","fileCount":27,"unpackedSize":205265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7cW5CRA9TVsSAnZWagAA+0EP/RZNqy7zzANic+SeBZXR\nyeFkJ/gJmbunlDEzTAxRqr2h54yMaZLjC/vqibE5pqwZPfY7urK8qUUC92+d\nHp6BrDVeH4KN8XNvN/1y2IXfo79Cuo0ud9BvSoZFyTpzSPo0wUHjho1yQbW5\nkEoAbah+BSXhHOzqZfUDx5ecFAEsJLLO7NJ3Lx+k+kkCRJ/rIVkNgxqigqN2\na2hOPVipvZqZTRUDPl8jV+l5YRxpkmx6XssnGfO0SvCO5Q+gjO3LI9SY1v9Y\nBvZs6AWPP/Z5TvJR1D5tJG+NacDKzXKKXbMdXlLB0opGsiWy/HO2ZKjX2O71\nOwgACxPlELxCHpKwkQkv//cAXAegqskXA5zLdUFGDRxjw9uUnAaSeF79jceb\nhJ9i6UEvY52tcttGlZHBj4FASIdMeGPT4PmhhEeJRMT4dHuD59iL7cQGr6Fm\nD05BvovfnrHieAkUehX1J+Hole0/i2IYJacOEPwzszRXlfi/OkdFwYe6Cy2h\nyTMsNVBsFO1QWa9uBZXME3Fu3WozCI+GB+xXn/s6ipavqFw9C3ARCLsUaHPz\njYZe3C3xOoZfR/FE24YKQBDlCTqkkqW6YJFnjsWYa7uunp5UBJV2GxCm2Q0F\nTyKnpe2dNFK43RoiF4DWU4AaMo3pE+S7x62Xm2z4y1RtHeIpzkVcFwG4+PHE\ntI4x\r\n=ZeuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKQhbjlpfihm1+Y6GatZ1Jp8n2Kr2kRYiwz8C5Flzk5AIhANiT2Le+gWYYa9ZH90Hz4VGspgo7/N0zFzX6OAYsXtHK"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.14.1-alpha.8_1575863736912_0.1348522725803747"},"_hasShrinkwrap":false},"0.15.0":{"name":"@react-ssr/core","version":"0.15.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4a7c33e60247c55915f2b90b2b2e777309e58c44","_id":"@react-ssr/core@0.15.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-AcuEkgMWKFjjxKYUjJMo1Qt/SE0GjeHl7M8MFkIh3QhWkNAKgy6kugAa7zHjN4rPVyoWf6RqQ/neoVpKyjSOTw==","shasum":"8bcd75461edee138053e66d94896ffbf407b5e6d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.0.tgz","fileCount":27,"unpackedSize":205248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7ch+CRA9TVsSAnZWagAAqCgQAIFbQ3rYca9kft3jxsQs\nCxNMnQX6y7Aq1dfYJ0HTJVNUhJTeTfyUbOR/K1xhmR+5JgGKs1a9l+FhXUrf\nLPBQRE1QQ29eOoumvp3H2RtiorK8GQybW+5pfzlS0NtJakLU4EePIm6D7TMB\nMdWHlLwV/Edi1ix8TB1AqQlO84g2qP2aJe8GKxgAG7i8IkUoJAdvtraQwK4t\nY9hguQ1c60yRFGmIVz2Vf9XmaFqdWSLMtdU5QDFMXcJF7uQAO9nKeQbgix7z\nCxjQP02o+xdtxAtItz3G4Bgd8LajwlICf0oqyDZHxldNfNKoVQi5ubp4bp66\n0dXfchW3l/55B8JcYOTIaM4t6DxNoypOo0YZOIM81FzWfaeXxQa9UEbJrvnQ\nV+q2eh/nolYBA7dZXmxo9WDDzDSqKIAFduuVApQFCxZ3OwPKckmVcSq25rcx\nYYV9EcIa+UKk6suZ7PHTmQHDAcMYpVF75/bx58ll41m3yq4bFcSjqGt1S7j3\nYYYZbEibE3fhftN3FEtIC7tpaUmf7L8nMG+0YuebBfP39rmQLfpIGVDTG2rd\n9HzTIpxQB3BPojRJaMNKABfvhpLT4z/85RblRwT59dM4mif2OTG10a+SHBm5\n8PnurHyYMriXsCk7FBje5p9Tz5NCCh56Gau3nyuyyk9qZyKo/+34SgzeGz93\nYlFi\r\n=KIQO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfVB5NwXfLTb8DSDgOfLYHCC8zwz7o3rekoR4prnKCswIgPbWVpwxBV5/VuyNZa+tdAqVu0A7FYbF5bJsPDEd6Uk4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.0_1575864445638_0.1948621826325232"},"_hasShrinkwrap":false},"0.15.1-alpha.2":{"name":"@react-ssr/core","version":"0.15.1-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a2a3aa1844332dd9ea170fc5b30e1dad8178a788","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-mVtMGYimzm7Z8GOz7LwFNj6sjBLd6jhlnHw3PIrvtXq61Ns4Rhqt3npareBRVL/EmqZ4ry5scBMOCbWUiQYH2g==","shasum":"289d072d0fd93f7d8368469d9a227c9615802015","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.2.tgz","fileCount":27,"unpackedSize":205311,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tNZCRA9TVsSAnZWagAAGSAP/0YZuaNVFci1k3KEDEDr\ngmyKUmSH39s3zJVoInw+2/4/Zqt3uUtvo6ZBsTBs8pn0wVI2/7xSFqBdhIUZ\nQ5jr8Hp4VDiCoYLtf0t0i2A9stS2xCOty7NxtbiDh8ovzk0PDvBtbOtihFtm\nJtDovvf6QLwAyCuhP0CU42DPb6f1oHlSdRHREMMP23BKxX6H2sIY59E6BIbw\noUx5qdEDtCYMticyft3zq5TCAGTR72E1SG4hTsvQymP2cX+ObZZW1oI1plhf\n+oL1BsT6m5RYxgvyzEbNBQVSPcuXj8+RI3I1MKOBqCyqAO4ezqaIEmgYY/uu\nKu/rAF7dShTkLc0w1x7GXpbw0IpZqmttgSbpvdtajtknGsd+PG6JN7PPe1My\n14m2VAnUAveFpW2ubyI/7g2bU0I9d66uPh2YZz05ylEGgPOkG0gmYW0UNMcm\nhW9PD6aDZSaZ/yX/nCATF+RpuO8JMBJ/0tgcAmnpPAOpa2ixW+o+oV0SkGTL\n2hG9iVJU0wGDOC8Qo2xyP3vHmdX7o4BEPpxhM1e4phSrGxbY6a4tU5XDnxi0\nArmyluEwe+vNqF+Nk1MRD4ka1n9h/pVX/J79IobDrItaz474kX/LDydBJ+8R\nda3Pphcf8vAt7QKD95B/g/1DzRnLtyjN+s08ZsITPrT6g1yoLFcKq1TJXadN\nfmJy\r\n=z5Rc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDofG+OrdPVmo3UrRVOY00UXDoEC42HtisjsDiocFhrAgIgdHGgYKoN7mb1NA3vW6ZFgUUycyKa2WP6K3HkJJIOwSQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.2_1575932760738_0.07078273256424428"},"_hasShrinkwrap":false},"0.15.1-alpha.3":{"name":"@react-ssr/core","version":"0.15.1-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1d20361e8e0b15b2b5628f7b64ff92e91c6cf4e7","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-B8dRbF6+3jcOVwUOBQy/djbPsevJUuv91UDjHCxHAVkTsPetj78ulaUiHIhcp03AvQZOfRLcA6+8HNwSJY9aOQ==","shasum":"6968f8849d2e1df345cb2766d04bed72f998e3cc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.3.tgz","fileCount":27,"unpackedSize":205287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tX+CRA9TVsSAnZWagAA+QEP/3By+aUODc2sfWaRKLc/\nuoHCGTg6r5diD9LO9EAupG82f5L5J/457yZINTTz6ZuloUcjZCOU2Bi3FxZB\nimNw2s0t8tFS6TZdDETX+nHFVW0NXrPuYI1RQ1+aykfXIvppJYa+hMVWKAC3\n0S2Bp6aSkgm4F/cmlB2xu4AvL2FM5KsuN9/c8sX3ZBBU39L7H86ZvOrJvtDp\nx7tLx9V1+yd8Yd22kqn9HTV0wUl6AkLVlkYpAyv5eLq3eSqj+Odv0A/EGfBa\nvoQBzZ9uq8/Ws69FbNQ7uNiPWQnp4URv7JqdhAIm1nzVvu6hxhqiwgmbyGwZ\nLBy+V7z9EuG8G6ZTkOX9TJjHC/8VWUq2RQ8l23JDF3ZIh9Agi/DtWe3olSHL\nMvwtbjxebuDsyVaiNmfBdTzZfof/4BcJPagodpfzzwulM5U6XIjytlJ6Kh5M\nfyyJ1/1hw2ZvjEO/dv+ZYUbJz8ZBpv4oCot03z9BN1J0bX4ofIWgwSOfszKV\nx+AbbJF4d6JM7Ta5oBB4w/1S8t7MIk0f+uir+0G9zBNRJKOHdVvaGaBW3U0Y\n1r16CMrmokNzW9CN2ci2IaHZcEndQ6xIrl3nkmAxooksG3EY9sFeH5fGmLuG\n8ea7pzwQ0EYhpBj/diLScFIk1nTuAb/U+XgIT88dP1nDwvKhVBDoAmCwtdrn\nVHig\r\n=uMAN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3hx+VtOxs3QgM6FbZKlM8HIKuAW7OuQbxcm1zaRVTGAIhAKELfRAyqUFDl8hxWl5uOvD01aKj5P1hFzVofFts8kcy"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.3_1575933438166_0.8843985767387423"},"_hasShrinkwrap":false},"0.15.1-alpha.4":{"name":"@react-ssr/core","version":"0.15.1-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f053782a9c42470060d74eb4bc092b168ef75eef","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-1ezN/GEXlYvPkUG6+q05nqbfdIgnIO9VY4UD6iwbFTzaTGWzHcHegbT4mcjptAs2mfU3Nt6pfSztRkUanwlqYA==","shasum":"c57b8a49bd7a23223c281175e16dcd25c1c7ed4e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.4.tgz","fileCount":27,"unpackedSize":205335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tbvCRA9TVsSAnZWagAA1BoQAKK1Nqi6Uy9oB7W1ZPqu\neLIzEilmn/lzwomC9D0SDKaVsw6bwVyPWLnz5h2TwfECdjydHL3Bg0Nmz+/b\nFDkFdXuTDd6g1/xbf8QRf36pjP01l5t5aoUf5rD7xn8x/g0l5T1jr4EoWFDt\nZGVz+s0izBGeJsoejnKPOxjYv8sL+tlY5WGqcK+ySXiO3F0hegtiMmJBgSRV\n6MzTDh0iqtlFlXJjw7xBqeYzvC8lckwUx9GcIAGRQQeJno30MyPO8EQY1xDK\nte/M1zi2GDiW13YccLWuhZ+WQa1qpWJS2c+ckD+meMTW8h530F6ozQAyA6sz\n4nYLtVjjgwb+gbqV39kksuaugbgh39pMwpYDE0RuHmiO7yoo+9F9qRCiSNTp\n9Q8AzSTKoYdeNFhqhk0lPGe0KKQONTBy8IfKuhdQxWGCje7FZuMdF4oWqMFF\nvv+uKOyvBtjQyjp2h3ieDdh5Ee3yDELRajk+Muq8UzhNyyZJtyaGPh9Zljea\nV/KDDWkg5XNRXJHNV2yxexcs068HGpEC2XcMgTQQ2dB18cYQcpM9hwbC7hdu\ncBsODRUjOZyMyE17uvrRDzBH4q//t3forIKxnAnGA+zCDlUAx4VXOFpZKsy1\nN3jOhPlcVJ+vE+xr/+lqDVqxDqrkV6Y4zlXpSCAL0FmFGi91R6EtclGDF+DZ\n8QYk\r\n=J0aG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJBxKb5MXznY8UJWIjc5Q1Vn7w8cb1LTaTHqR+yIblhQIhAOoOB2bbJ15zcItiiYQK0OYgu+yL1AZB0AND5oPDFgae"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.4_1575933679252_0.6872489195091742"},"_hasShrinkwrap":false},"0.15.1-alpha.5":{"name":"@react-ssr/core","version":"0.15.1-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4a6d3e2e14cdb7145c8cc76c206db0872450e2d4","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.5","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-b6cBrnWaZ4ooHGNxfNwWkrlkF7zh9mix2EX71F4Qikk1A5sQAp1E2ZysEgOhPIrUvmgcm7voFGVREf8/Kf8jSQ==","shasum":"dc8da5c514d647bf22e79862f4e9448204a4b859","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.5.tgz","fileCount":27,"unpackedSize":205284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tehCRA9TVsSAnZWagAA34oP/3kJpPKrLq++kedYVBVL\nKkevC2YsYWXDjF1fKqL5jA7UiwHumF5BghcQNEV5ikq3q570p3H4qKV+luMA\nxqBXRr053yuS+kqCRtY6LRPRqHCLS51VXpvGIqq3WBwtxgqRlqu+CQ2wXo9g\nMBl6rFsjzAnURMeyDzfUeoQxJbSoGpebo/0lLQN6dsnVFmPqQJYXKpKe9Ete\n/SLRE+v37sXRSdt2wj2f68V3vpuhwcdqVPYzCEPOfcvIYp5YsIRrR9bE5DIq\nilBf3vNl42PQ45A07JvRQilYI4Mz5a0D9D21JzGGkgNCr5RAw2wnSizJDL36\nQJSTJf1f5XTW4/5onX0SWrjw6K2xKedkrJ/4wZ5/dts2HOJyZkgd7epWlMN2\nbRyw703sQvj8mjdqBr6lDgZS/0ykjFiSnibj2QG+j5NrfE366ZBypk10F+zv\n8qXcojwGdQt41wrai/cWaIfr9VPQ2QsE/X8gip0vns4D7VqbYhIlO2v7bdE1\n6WkiNZzYIrQkGE4Bsv5WGUB4NeT4LHq6S249SkWNKhwzLhEaK6ItGqIZZPAp\nIav1XUUXSXVSQU32py1MC1M8+LjtcbvjA/T/gcvFAr9bctEHvQUKYLdaDcHF\nhhl6YuIu0poOWAeDojtGDZ6ASn/gB/XvfdmI4L3IXCvlRvHjPTa8Opmx2Wz0\nZ8gj\r\n=FJPh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyPa7Cjo86Z3bNC2UFoBRv3leesFiWDvFWpn8i7ipbpwIgQjr20ygl3EALww8ZioB0sIZxB4Hc6dqCI9LDUP1UnqI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.5_1575933857410_0.07254510189695651"},"_hasShrinkwrap":false},"0.15.1-alpha.6":{"name":"@react-ssr/core","version":"0.15.1-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"33fd0f8d1f04a7c61c05680455191021da3fc88b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.6","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-7503WmBRVtc+W9EVJVGzwTh8s7/SEwlGtKhRnuVZy0THI3x1vDuwYMzOjzaiWnysEWYJEbRdr1HbTCX24sJ3qw==","shasum":"fc9b14647bb77c30f42ad5e8437011cd0dfda947","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.6.tgz","fileCount":27,"unpackedSize":205312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7thqCRA9TVsSAnZWagAAd1YP/1WHbEuOPr4hxOO55KmH\n4Vr63VnK+oRO91yYupGSHXspahCZQ0pzLIQn9vY/xEP3Gd002WXKpnsCsChA\ngggyifZ5WZQnPSDN6cKzg33kekaw1IOy8jfgUmt/pvjd+7UYgvYlqNK7GZWg\n6alAIwwB/RYvnN6CqTbm4tWmVgqGq+Q+r37TcouvHsBMdypE1IlUeyutuMlH\nxXmkcH3u8AOs/K8nx1ak7AqR+IJH4JcTU8GcNJkhFsKc9ltZ9dKN2srhI+9K\nViatOPEucVncdA7a0j25X4snpog/473mxQjN6ZAE+pYWPHsS669ImA5VwBcq\n7w8I1G1iYSr2nmqjTVqy+X3B2sWmmP1mp9x5AmrkeYLesxH4hke9L8lhu9uV\njrDi4KEZQeIBASTDboExBSA3viLadJ2NL3doflgK14gFCFK7uRgWOeEruFYN\nlfexeClHhaTfGNv7zgnWcWcM9C1wF4nGr4+E0/PCiAPx4sLdmhbcsS6C5VAe\nOnOX7HoGZrgHDMiGgsPwb2CUk3yXZ9SjR2TeMUiiQN9VJX4s7NNSAZK3TbL4\nhjqWEUZ3gC39QLIOW8tzLVD7jKDeDghWSGWngNe+OhQ61ODgREXhTWL5M3a2\naQQQah83aAYMq1w189upK7Y4tiNrXLTKQvA4DuD2GYg0SQF+/5B1+jKcGg9P\nJVXr\r\n=eJ3C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHUPG6z5bhZBlxzcSe5CjU4ZAvid/TTC6eGqK1NtwLBoAiEAgslY785l+8NSsfayl0fiSoff3jpPOoMtuZ3Uhy2U93E="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.6_1575934058072_0.02329943221045383"},"_hasShrinkwrap":false},"0.15.1-alpha.7":{"name":"@react-ssr/core","version":"0.15.1-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8906641aeb26194c321bde7daccd7136fd8d74cc","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.7","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-6erTs0FcTFoznuJfrkapZEDtzqcMJkNJwgFUYtdw/KHRoj5UeyV07df5dzxEMa0+afkqYa3pBiRdYmH2bmNbSw==","shasum":"8524a351be67f7e50e97c05b3e9e214244c670e2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.7.tgz","fileCount":27,"unpackedSize":205189,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tndCRA9TVsSAnZWagAAlnQP/jFnByM53VSY79zPg8v8\n2FwjlXV95yNCyyW87aRiOhS262tZIUInOtawFq7AJI3Bhc/eBQiPtjPPYisz\nDfEC3QmCwZy6S59X6x5c0glN7m9ESFoPq62n1zE6WOfQhnfhiSKCQspPo1DZ\ndTc179753AR/yOU1yVFobQwAiNRAtwj9QSrVYY4AKp6P1avuB7GUkOLsSNib\n8Ck7jDmrlUCw7dj5LXJ4FHwanMnzewhTudaffEcwJHbXqrw+ubs5OxlTbuMn\nWj/zJfiTPtNy7ACWBDTKPjyDdlfImBT+4Dw72j1QPWd5FhmDo2+GnCse6Taq\nPRZAsRjvHQ1BHUpJkrEygLNnsqme/dLGb55wD8N313GCcEGlYJgz61L8g+Uf\nG9buWAEsObZP7LvQbkxAVesiL+/hMAVarctuLq9XgKp+miKjWXXTZn4bRXsP\nHUZUA6VpcAzMwdMn3SbMpozfvusFxAvE6b3cvoY4mLnA1FMXMUcD5pAq1kGe\nhclATcPRMMicYX1FFvD8NrAPRggxNl+lF6t+yXt3L5hDOuEws/pbKiRU8k1S\nQCZ4y8Un1pLFubYfDtL9zkDRHfhGnbG4YwSc/gjXf4/fNx4U/IdprAo55TtC\nTLAvYj4KVcakE+ucUQPD1bLGp6FQ3YMoEqwtRC3BkCm4XY+2H8Mi5FZfBov7\n25ta\r\n=ihnq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChgwTTvjWsmcBG9ZIZ+IYihucJpMiCrPUFyNEBPSOY6AiAtExJfRVo1vnHlcrHv71/NdgdyVDLgbeTZl140be0fWg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.7_1575934429048_0.2997377959426366"},"_hasShrinkwrap":false},"0.15.1-alpha.8":{"name":"@react-ssr/core","version":"0.15.1-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a14596a6dbbd595c5a22a88bd2486461da25001b","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.8","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-3kmdfWFFoZv04Zv/oZj5VSJKGO9lpE92U48KxyZVnnuRzHCDL4mMLstWsGDK45L1ltI0tr11tGw/m5PmM7SLiw==","shasum":"e201eb69a0be0a9a44a846afe1ce6742abef104b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.8.tgz","fileCount":27,"unpackedSize":205183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7tqSCRA9TVsSAnZWagAA4uIQAKGFzDGu7knyP6jlsOmg\nDh1YuZ+C4luIOINeJy19FPphwZebeoNb1B0RXgvrznK4TmvZrT/+EjJgMjt4\n/x69pk7IN6IhQnei5zCK1jOac5B2qpXiJ0l8HQSsDjMTQNR+se2uVpe+d03q\nqvfWzxW+CeBEVYJ/dR4Juvvf/dYWhCe/5u0NKnFPNXb4jT1GnDvlDCz6D6I5\nSVCsXVropwjxCzf/ZF4im1TXuKdxynAU6qiAXP4zEaz01SAvMGv5IVHWSLTa\nVzzYYvE8Gra20iiLk3anHWnD8eZJjj4CPKczLhc4eQ7gp93OPJAFgK6S18b0\n/LCTnFtM7i+yp02PA1InlY9lNzkKwSryjotm6GgNB/cFV8ZGSNKwYEjbyJWb\nwSW3CSebWG1AThX4V/0P8fM1cIh859nMR5aVu9dKCGgnjyN+g+MSHEveLBqa\ncVhPeqWkkgOBNjsbntFdB+8Fnkc7S+5T8s4NiwqzMeQF2iXjPUl502rb1YM0\noJYaqF1vqyYDkHwhI2VBppfERHFOB8ombLGbTX7+nxb+2jPZZizfkdnbFUX4\nllsTIFseKxDfWr0+M4mQdSfgdB9fEAcDG/iM3WOMpAlO7COYxVnEj38jg+vS\n2nq5a+LEMw2jj5ypBWyTRCVfsfIRvi248HYsIL4ZvZ+6aw1vghYqQFVgxiZW\nkD2c\r\n=ks4z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTGgMqVFAoTHeM+0Lll6FBA9AK5j0TdwuCl1qW5Jo+oAiAQVhBwLmkzN5eV6RK0hThrZtrzkrrDNRGYxhhudIQS2Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.8_1575934610508_0.3179187158410359"},"_hasShrinkwrap":false},"0.15.1-alpha.9":{"name":"@react-ssr/core","version":"0.15.1-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"16b1cf76a2c6ddda55360d43f0c9ef1fbdaa8d36","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.1-alpha.9","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-EPBhanispF/4ts7zzRRsit11nPRnaMnU/1P0Qz0Q68Szcx1eylbWp3lw0NEf1i9sRL+xxV72RbfREh5LpmnOpQ==","shasum":"de0317d4a2c7f0b495ade92e0cc141e534e4ec5c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1-alpha.9.tgz","fileCount":27,"unpackedSize":205323,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7ttwCRA9TVsSAnZWagAAHwgP/3v0TSVZ58bTeIwLCQL0\n26v8P/iAHKr0zrzCWHv58LkWJuhChA9vb0aLaKg1SLfOjTpFiefEZ1pic2B8\nai4m2C65Wr2bC0IHQIKC2cmJWA+2hRcQecR0EnV1iIwm7Q6MU4RI0jusAqvC\njn+MuU0rsMQIMC0+brI2DCE5yYq8LdBiytTxUS7ykughQRaQpvZw5umsj8P9\ndB9Ot/lJXMnRQ44fI6nB4o2Y8Byyfv1nI0TPDW8mvKvJOSHX8qtOwNCAl+Ot\nPCg+YOmXHud6ITC7Xm0MhIdp5ebuv0L30Cd3O46JX6Kngbki6J2lwQEwZLte\n+qC6XWVHJ5G6gWG5ddbW3VC9ZccjvdGkcoSBABKjZvgzWrcou8vVB6v0F0TM\n3Z/yiRxRDMxM0DUbrvXKtf3HjBr2uQOPHONTh3scUM2mf/KXDZb9P0tZv8C2\n9fUu/AxGfqRPLCLjBsi7wlpxHCQrBBmrXOirNEWNhIru2Oi0SnKWke/aDaXl\n9dnGPMUb2DSLbSDN13SPIRIj+YJ4d0YZI7Mf3CjfgC8H684SOZZa31a4Frnx\nJnij5i6zpOeI/QhjqcN4GPtBN3ZfmH2Q3Vekk/AXeXwDYrA+IjVqQrI03UqE\nE75nCX12J/ZExdLZBLaL5dQieQDTNiTvf0ltXgaLtEqYqXwDnhMIroD+4ZPT\n4v8u\r\n=+ruS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsWsM1YdydFLzFteqIDJg9wvWpJCAxWflJxXN4y9EKFAIhAKwqN5lKeQtaWza5njIz0vxt6ogVYKS1UcTVYzJLVe60"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1-alpha.9_1575934832482_0.9024786560338924"},"_hasShrinkwrap":false},"0.15.1":{"name":"@react-ssr/core","version":"0.15.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.2.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.2.2","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.9","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"81736018e73a33586b2d17d779de097d0e887ae9","_id":"@react-ssr/core@0.15.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-PKmOoVRcJnsEA/B2UPfbF9UqqGR5Sk2q2uxsMnfv+6e0biXxPmofDXz/5Z4KubnYk8rg40ZY+5A791MYupGs5Q==","shasum":"6632f06b6b6cfb2b4f07eaa8cd3c140e2f92b8b6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.1.tgz","fileCount":27,"unpackedSize":205306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7t07CRA9TVsSAnZWagAASNEP/iKYK+E059uo9GrxG82T\n5Ge1vyPnplpP4uCp8IvUVbx7QNJobS/2wBfoTMoRIUO5PwKiZIFwREkB8A9e\nlM7WHBZ1DwKZ2MzRdLqD2M2/QrwPXwiOIq7RlaTaw5OfQd44iAGjP6t9JQqa\ncSVix3m1X/6/p0np+b93Q9zUywOdMIpkvuiI+X3p/F22LjcBPe9Oxdr6ZBWS\n+N/Jk5wcJ5oxfwRJyBKlqT3M5UvMD0bndYC4Ibi0V0AuwYztyLwd4pA/G882\nB6N1XDMTuJk5ldI57VULSsur6tv03ZEjbMl1V15tpuxkrwKQuq9sCL1rxUEM\nKu6NlfDyxopXIKU0WJ29s/jh4xqHv3S2Zn/mTBbXy0CflJKEscUHD4aJ6ntf\nRONz2FYfyZ9GXEoybK5lvhF0fu+0CdoxakApfIOCXwA0/TfxjFNhEtB7wq92\nqVSxp42ThHez5K2a6yT59tG/zki5xoDTXydNRa0+VQXvWvixAdxvfCwv7arV\n1kD+BQpK8jtYOeEfUPYp+WFMh45s1rOoqd6OD8HaUD6Zbcve+B7VQljVPbFT\ngW4NqNODqECfBnSZLS7Jd9d3fQs6G7xHiBd/z7fhWPFL6+/Hus6bUNWwzx+b\ncCysbsGIns8BBbQI4wYX8CZ5A3YiFVuK93yGZkAjPtZ+nIZLTIN0PZD2oeM6\neSYF\r\n=Y1NZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmnwwo//N39UbGwdVVXBkK0+nz5Rxyo7cx9kOw9Nq/AAIhAJI4ylFVzWP/Z6bGC9Lj35IH2IcFySDk6qNVTe7xDBTb"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.1_1575935290830_0.34679791078370004"},"_hasShrinkwrap":false},"0.15.2-alpha.4":{"name":"@react-ssr/core","version":"0.15.2-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c64139515598dec22d2b5e6eadad3488ce7e9479","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.2-alpha.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-s3QXK87jcsErCOobPqO6CfWxq/RCkqiJj9lKU+jzOkAu4oVIL4oUKv6a5MmYt/daK23y7kVqp6Hb88jvrFtCog==","shasum":"b8ae6868d3af77583273bb924fa680fa99e7cdaa","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.2-alpha.4.tgz","fileCount":27,"unpackedSize":205637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd90inCRA9TVsSAnZWagAAupUP/3IjPLf10OjhbgsnU2jg\npdbI+oV/YwjtIjZ1hWW7O8EF/TqjOeukw2cp/If/WX+L4dhtYtQY9GHfEJ2f\nuyYGAJzqlFQbEgqS7kC22b+wbpDLK8AFYnwu2vux6tH5tELW0tcU1efs+787\nZNVY6J2NQgI4py+PtQ9ZyukMlSgOiVk4vUNEz4g5CzjuJ3iXLAwxx5vdpMv0\n2W/aRZdBnGauSSiVhG3aK3VT6uVEsr26rxkB5nMQLpxm+omKLLDx3OF0tIAV\n8o28X4Ksh9TA5RRiCqej2VYmk0c4QTjp8CBnQ/gxVa3X8BQK+xwjbSyfcazO\nhe4TrQHgst0bnLt7T32hX1OY78Ybd6Gh2IgpT3fJpHJTXljZBNRZ07tJ+fhq\nzMeuSPclZ1S/GGQD/kPjRPBY82FPmFH8n1PNxsx2SzCM1M5l3kTZqu7MTo2f\nnUmgSu5wpJBJr5LZI0e9C8jQd8wErsAKGbAWsm3G7fAdcJF3WAZSh4FeLGvg\nfdtUoppGt0h67LAHenlIxpCN0owx/v8dazsIW7K6/9bY3xdENCU0ieJVM4rZ\nU7Z3p7A09InINfTnZAWMsERaicLi2T2ZnTW9qZjBPQWqOVXkkgyIiVKWOg1k\ns1NnmYAQJ3oeylz/bTJr/l+qomhSO7Xx6/HjqX2c3eIkuNgBRLdKRcuPtp3A\nvAn6\r\n=ox6A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoij8I09VLpkntAOCpnw/eOsUpbIeK90C+RkoBnD3wDAiBEDCtXRtQfWO9CjLSekzPdllrsmDPBPAVUX5vhFj4hFg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.2-alpha.4_1576487079018_0.12212215253993763"},"_hasShrinkwrap":false},"0.15.2-alpha.5":{"name":"@react-ssr/core","version":"0.15.2-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9efc86b7e0337cfa1bcba0ee47560c366822f42d","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Passing the server data to the client `props`\n- Dynamic `props` without caring about SSR\n  - Suitable for dynamic routes like blogging\n- Dynamic `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.2-alpha.5","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-Iln71NcGt1r+CUrVGIPpfgxzosnWPzsNRb11ycGLn2Bq/XfZfYBa4OgIWPZA/U0kwUEX/eB76kVV/p9teb6xiw==","shasum":"28d5338eb5ad6754f67bbd5b1079f9391ad60916","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.2-alpha.5.tgz","fileCount":27,"unpackedSize":206047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91A6CRA9TVsSAnZWagAAgisP/i0eAi2lN8SBb4IJPtYu\nI4DrMYbBQh8CR+atRt8HmboEJJSUkWOrMDhjIP8dVp0+XVqW4BJkNWQlMx4p\n3MLKuKQPRch33qFlxl4rXS4G1Gust/ZsgeDNLgSTFUWqpNkhee4zjYVSeasa\nGJqZrawt9DqHx2Ue6xjkj1jkmOLqbeYLqBC4T9qa2FRfYzqJSoYxsoS21Gk8\nI/tMjNowI5TXXq0j7MXx5sTFljSapYD1/w2Oq+beMIiJZMVYYtZTJDxbM3tC\nPxKGjumc7Rjr3zrQ3TpQfnp4HakCJwAgK2teSW3sjLJ2ukarW2m2bEDxBsyI\nFi1N5Xd+u+LJ8utf42KV9K7KvVvP2Hp/sevXReiodrGdNlllZYTefrMSxZzj\nCewsKLf+yt5Y2JVnF+fBeBci28vBJoh+eVITBSS3nv4WzN5n6sYZleV/MHWs\nuWLKVwr7OdHZKk5QBW7RZ+fQz3eS+xYVnWJcte06t8g57UrjoUzATD/kxh/o\nviwRyMmEEUxE14Mr7iaSMbJyzLF7WXQXI/17r+zUr2u2NX/qJFHG0g2N3Qxq\nizQOaBKRnQBuTmW+6rCPDlBAt2ZVXN3hAOB+BiNBkQGdHWg2KeRFJondav9v\nPhSPDAjAfbdmtI+vNfTnvjEmxXbbChhxjppx/5uRGpPrnP2UI7FXCgOXa44D\npaZa\r\n=Z48q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0a0RUy+CWjqLVb1C5DD5e81A6i9hUUdbInFu6wFj2vAiAh08aj8Fdhvd2VRuJI1IYufX8b76AbIlrJstg+ruL+Ow=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.2-alpha.5_1576489018020_0.6897774283023868"},"_hasShrinkwrap":false},"0.15.2":{"name":"@react-ssr/core","version":"0.15.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"12b5ec953c340d4556a1f24bcab6c237a9ad493b","_id":"@react-ssr/core@0.15.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-UsXiuiCzX1ctAmyzxIEItoIPGaS06A7g5+7T+ocyPdOBE/q3z3Yd03SSyXe6bkqhBdH5trAXxwg8mlFQtB7/hQ==","shasum":"a5b3f68ea8a2a8b05e99034e95df20cf6b3b240e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.2.tgz","fileCount":27,"unpackedSize":206030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91GuCRA9TVsSAnZWagAAVwEP+gLnnFC9aFTx0KYjeivb\nxlApyF0bFDaqphRYbiYQXWtOQtE3lDt2JZP8DFCv18+1mW2j65HZTrYqIr71\nAas2A56LNhu8ooVVzKn/G2qdpIi4x0/raPTxA+sEKgHrPSRTimQvAtM7t4qa\nmtH4urm9Ip3ELYdAJxOrTh2HRqbQJJdbJEPkIX5SQZ6dUu0RPOnWpXs1Cwmc\nh+waP0/yScu9RlL5idOyqWy+P6Q6kukoHOrT1BLokEm+lRtMH4cqdFik7EfE\noC/YD+ngxfXQE2ZKfuWqcs84p3MraY8SIJcl6t5mZ5AzsV7+vqLspbAwyjiY\nGFDSgHq2lBs25xEaPn0lCbG762JExSb47l85q3b6A9/5TEsuVOJuPphhVdjV\nAm7bqGdr4RFq6Xk5z9oKUHaARAdtDQE9BD1yczs3q0AsBSjp/Ywx1M5iQMxy\n0A2yobYcpTuBjidSzDFM/e0QnIgCRKbiUBLIUYbG49K3aULB7LfkgBPvnwo2\nqRtDFTkuv8wZ91B3UbV4/17HOYYHV9+YXdDjefq5+xMtnOe9+nccbpNufox3\nqjEid1Z904JVQobKdQ4jAOgNTwG+xPgFN1o84lNLfCETF7p68mhc63nKQJKu\ny6GrzKC+xEnupo24sH9Hb8ni6R70QfzsxTZfxDkui8xa5ol/yJROPFNVD4XR\nZPmn\r\n=chuL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHe6hdZWNANBBZy1keawRA63PFVdrtKcnAs/XvZ1AVd2AiBrQYaBBFcxk1aLJEwALSlEIGZqoOb+fJrkTBphNH4Eog=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.2_1576489390357_0.7113565842001595"},"_hasShrinkwrap":false},"0.15.3-alpha.0":{"name":"@react-ssr/core","version":"0.15.3-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"53d6fc10d6c1f1f76f0696bd990f7e1a8048a03a","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.3-alpha.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-obJw77/iOK9+H0zKZY+glu7qnrD/w+2l5R6My8cJBbnT7GLmE47ADSpVJZWG00A8me7UA2oTgOSHETu0JgfngQ==","shasum":"4421bd6f134a441c0b135db720721d56229a29d0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.3-alpha.0.tgz","fileCount":27,"unpackedSize":206026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91M8CRA9TVsSAnZWagAAqKkP/jNMmShq4d/vYEnh+Mzs\n9BQcHlzI+1ralK+jZwbtSpgoTxkEXoxxMdqCkHiSoPKhZfkx8DgxXGBj3u60\nURmgRia/Ow2jQHT4u5WLAfsqADbOh79m2dbVBUDcsa6W/RI1yl0NK1AHdTZD\nOtwvvjUuy/NlPmGinGa3iA+2dwMHVTnep40x9p49+KHBA2BFSNfgKsiVVwPk\npcmL/cBEzOD+4HKqFeFt5n+Ru5U9Sr3/bmkzT3a7VG4q7Xv5Ll1o/Pj8K9oj\n3o7E9S6Rp0pP9MHaoXAlzQCskTTk9lJvu3ElvgZB/xfNw0kTNokW1mNGmWIO\n8ZTfvxg+MF2E9ym3ZVvwQG4QcGIAPWtGpM56wEBQ7Z1l9+up9BlYnfnhOLxw\nW2LKiNnjtcnfrljQcAZezuTldAf3gBcwqrHh8FiaKnc2NmhxcHcWnwrclK9i\nhB8DGxG7FASlyfc7tqYh0D+w7xmgik6XBLpGPesipr8hjje6HuU56jt+vrq9\nJUavHVETqUZS1df14hsltga0/h3S/pOgO1iX+ggpYj4hKGtatVNITSu3+ufn\nLAyzjMn/uIW3BF1bsLD+f4EpiUk3HdWGnxeqvXjDRQnSVr3pNP01sxk+7Ooi\nFzx9AkhI7fW1ROCtKIFHVqnVDmKYdJkU8D3saEVVmrFz03Owk88lsJXCqSz9\nQw7R\r\n=y9mi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/OuTHWyXGNq9JOnqu4ocOoYPorCK4/eZXtJr8MsuVxAIhAMYnB6WdE9LHdb4pT9agbQ+YZr7OjJ7HKIRIQHKYQl0E"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.3-alpha.0_1576489788466_0.8078666034136495"},"_hasShrinkwrap":false},"0.15.3-alpha.1":{"name":"@react-ssr/core","version":"0.15.3-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e9aba71e31ff56b6af91d1bf635c6c58878a6915","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.3-alpha.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-stn8rvz5CgyyihnYxyk4zYoh2ATSxbHYyoRxtjiN3uQG4WEbH+R2P7dFNISb1LBHybRy7c8xx6B8ib69/+IoTg==","shasum":"c918057681550341636bb0277da39931831a66ca","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.3-alpha.1.tgz","fileCount":27,"unpackedSize":206226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91RiCRA9TVsSAnZWagAAWf4QAJFwLFM6KcUFglnTFQcj\n9lPM8Lp++jy6e6vjSZR6P2DNkun3A2qxAcIdWa4QuZUyC9uTEMgDDVAxSfAI\n3Jy+B0vr9plVLa2x3udWNjGDnfI0vAxs2zemKdcAsak1sLNpT+RP/tyIvbNo\ndYLaDTuzllagt9bcTI0QwoC6eYa8zsObeTEVB74RW+tm6oxOrcZhUMfhbV7H\nOJGjttIw43h5IaifNc+WGn0KpZoG4tbky/Y6hCx6RO9jFNxLKg9gmFjkt8LS\nbpKAtog07hg81dWCIqHu5/3ts/YKHMo18b0shpQyi59zaTDA6CGjtYV33Ebn\n4epS4ZUHaSO5a5w8L+1NRL/hM2JAjN/Ez1R0bZC3B7ZIm7Gm5lmscKhq7fja\n08OGUfkKMCmwliYZi5NTlE9qqdJlhHMQetDWfxzxg89asHP4JDMohHfzg1v5\nWqR7unRWazwYL8M35ND93rz9w/yoFIYzl6+Pca74yzRsT7aEiF5PY5vUq6yH\nrUoWARVFzgpCK5rZf5uLZPa7Mi3hJYJLJTniAkucOB3CJ6uKnUC014hha3cw\ntOHxIQGvIcqHbpNDdat8ysSh0Kh6/T7USazyd9ys6gFzXFvnA6UzwC4JNNPi\n+Kh3FhiULQJk4k110x7AiA1aJ32svqwyigk9ieL5WPXkbiYnt9fWqSZDDafe\nTg3x\r\n=fF7J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfxjirHWZ6ReFk0CQaNa4cs19po3Q4SqGDGKnVTMp7HAiBzgLfDf2qajeqRZAIzurURKpKUbROY8dbBBFKMV9Xwkg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.3-alpha.1_1576490082017_0.05475673319833074"},"_hasShrinkwrap":false},"0.15.3-alpha.2":{"name":"@react-ssr/core","version":"0.15.3-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"62a3b91b1dd506e8f56990ce9b5e0cc552e64590","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.3-alpha.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-HarWuiQCD7zdZPd98yUVMkj1OAeLs8fTJHzlzZ6J5JoPnUUlpm1cC6BXwIoMY4587qw3NSTTInkQqGXbpMH/mQ==","shasum":"7603615ef8ace5542ee3b5f052168ad1c1099108","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.3-alpha.2.tgz","fileCount":27,"unpackedSize":206306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91URCRA9TVsSAnZWagAA08EP/1vGM0mSSGjM+RIFRk0M\nDTlYXkkzxEi9Kyk4vQELqVoru+qDRFvwu7J8Qy7eKZ21EkxwWazyeAqpB87w\nKq9HEIcgF6TsdF9n5UR8TOMwauiY2d7Mn6U2jhg7VxKCdsq7/GiOypFCbpBh\nXriBy2OaL40gj84OW0yHg7eV0icIcilX+QuP0+USXcNJb4w19ZL6nBaL6OA6\n3YrVlNQAF9xh7Q1MZJtGoJz1XwLvss8JFjvjIhCx+GMLmeqCjBt5TTI2juMK\n2zohy+7ld7sjV03q+Gu0Yfyt1a0UGluoTD7LTrOvX9vVw7U0MApmfOHUeOwm\njqTESfQ6856rmRCnJUr9EX1gXZboYEpXZPFgXFanyFUsV3SN56XEWeXvHHIc\n3hTc1TuhgyHnO5TmwuHRDEqwPD4S8iDpGyOGMs6ysgcD/PTdISzjYoCAUTBk\nHyyqdnuhoCC38W/JZpgxaixbz9eW8jEMYg1WlN18u1l1w4Im/TrsKTUutKYF\nZ+ng/skiPO1tnjJD97R7YFhqeiWV1gdFqEUasjwvln8v+a50HOzZrEtdeH/B\nVp/hBYxBWr+d5rPKNrUorz9lbEWgsHtsWVWI00VcgDbs8oY5y0GObEO9SCW2\n9EdmwBmJ3wHMZKdI1xyi/rw+l6fp2x7cvdoo0Mm9DP0oR8rbt6XCdavjiau/\nVeEz\r\n=TnNV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLeau0VYX9FUlMKKGjPz6DRvs18Aj1BebiwkXuepyYUgIhAKc9QxcrrUoe9FW7Japq60KosIEX9NPrVSfNVM3mqUYB"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.3-alpha.2_1576490257271_0.9392246976073699"},"_hasShrinkwrap":false},"0.15.3":{"name":"@react-ssr/core","version":"0.15.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4e9dd8356d1c34b5949e5e9633603371c2e0a1b5","_id":"@react-ssr/core@0.15.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-t/bMLl4AYNIprDZUBDmHqVRQ+bWzFgQ/4gdH549JPd1MYaaaolDN5JA8pwBV7Ix1MH7xqWTv88percQBal6eOA==","shasum":"936d730d4be9e14eab7ddffe372b8c5ce948cf0a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.3.tgz","fileCount":27,"unpackedSize":206289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91XuCRA9TVsSAnZWagAA0DUP/iFwd5/JIVjzMbgacLF4\nNWj47SA2Tn7cYnhffsNHcYcYBrX1MB9+v7NlMsoOfqLaRhn1HizEv21GyVvD\nDbyU6lG0KmmgXosEfXkVpWq++rD4/XLxXUyAi7Eifvh1puU9oERpugYkEnWP\n8fCjagPNU8Z/4R2MP2egsU7s82eExMPx5Fmh5Y5N+M/wAggRYR2BMH3zOl92\n6zKO+LathdNUsdjFTmTb5a+KYTse+3ehZUw4zhMaHViZvP3CXZSBxx422HvM\nQklRvxZf/igLNBxP4aI9d0XNXqklchhf7Aj0c3bfrqHJw+s1mGsyS4rTTWH8\nSygW0NPySbYxOCMnoRBgEXncYhbG5tepFfVHEuRPDO8lG9Elli7z9L61R9Xm\nupMBYmBor9YOKxtiKCGAG9RLNdQHnNgamu6FT4Zu9CYghvpU+Q0mz7X3qA2A\nbbSboMDf9xlngJ/MayhvzN7dQsschAsQLgTlC6CtccyNTvpFK3NFOzJG9CYM\nX5L88pJ4tH5CeKg4Jua5rFoEWjvkeBp/5CB0hrB1qJTGq/LNFLJqD297bF32\nJ/duRIFdHXcHzu1H74CasjERdLf8MPSeEoMGB2LygAGPz4Y4ie/uV47xBito\nO5dFfYzFIjXj2vQvy3Wd8+l82XSR/H4tl+2sGjY0KQyIC7D48+ZgeHoWsiuh\nA8vt\r\n=s6BK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFXRdbrlZPrKgfBuQ/wJWrh/o0DH0fbcNiNQySgjPXlWAiADaa902nh0IhS0T9kdYAR8Y4BJEd9uA6j+ImgympTK/w=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.3_1576490477056_0.9884545584122326"},"_hasShrinkwrap":false},"0.15.4-alpha.0":{"name":"@react-ssr/core","version":"0.15.4-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"36cf103a94bfbda43b6bba50b5bdf84b85770c03","readme":"<p align=\"center\">😎 @react-ssr/core 😎</p>\n<p align=\"center\">\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"A version of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/v/@react-ssr/core.svg\">\n  </a>\n  <a href=\"https://npm.im/@react-ssr/core\" alt=\"Downloads of @react-ssr/core\">\n    <img src=\"https://img.shields.io/npm/dt/@react-ssr/core.svg\">\n  </a>\n</p>\n\nThis package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nThen just run `npm start` and go to `http://localhost:3000`.\n\nYou'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nPopulate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n}\n\nbootstrap();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[The React View Template Engine for Express](https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.15.4-alpha.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-x/LcL1ZKCUAOIRFHGwiYpwWSamc43MuWbBU5weIHWVE8ptpdd4eN9s8BkiY325Ds3RjgrGG0FTjySG3bNvAfAA==","shasum":"1aa20d01afd64692826deb51f72ba1521ad9a223","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.15.4-alpha.0.tgz","fileCount":27,"unpackedSize":206106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91dICRA9TVsSAnZWagAAZdcQAJjXs2PfFwF8n3NHumGQ\nKuvtZoqipAJjNgF/B9Q9KdgzxVdkLKaak/sBxLoG00sD3TadMZyEQMH4FLvC\nACnp6BWhBOQ8a9tUxB9mWVL7W6XMx8NEoat4fZ2wNQECxfSyIfaSwCY3pdHc\nYjjKZfosqOQcLvTP8aGAXDDsRonD5E0dbsQJaeHl50gXzdrfy5Kc8CWy1YR8\nrySEYgv9/NbFdKAUfxpAS7FW573j9VyFpitobWDaRfOdbNFx8XUkRWWF64zU\ntc3wUiiNql4aKgRFrXUpzucsrOrB8pQOSYt0cEe8qizawJAJjd2sIw19cgNS\nTc+fXFKIMDqtFlxom2dZLJ3lf1xQCd4iTp94MbTGnq0XMEK1lrZWTTmMWeOp\nb8amZZbbqUAVYXhY8g/w9sqO74ZEdvaUiddqwD5+CzRhgjV/9vsbEL0RTUK8\nYFrqh9zjwTCpz6zxDIw+/VDqIAL4tEkrYfqWQJOXuLNCTcALdUqaE6lbSCD3\nSFwDGRLRIHeNWjZZ4QrJ2CIFgPPRbAG5pN82y499sIj91z29rSMqXkSqQ3ym\nuHdGXZ85wi+OzCUwup/p4JNhynDbZ6liusKt8L1kc4V07mEpwV/UV/Y/t2EF\nFMpRogRBZaMyZJMOM/X0OqsFwHmF/XbXLrEEBmQMgjlfEeOlHoXqEUxsWN7V\nmFrU\r\n=a8im\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGgsdJGQr2PVNeF183mBQA9lMC4GtQev9yenHp2nrZHQIhAL/bD63EVIILt2c+pR3E4xooqT/0c6ccCHZDMQNj2jmX"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.15.4-alpha.0_1576490824428_0.819333189831823"},"_hasShrinkwrap":false},"0.16.0":{"name":"@react-ssr/core","version":"0.16.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4bd1022433d2868d3b98fbb1c2206fcc5eaf8c25","_id":"@react-ssr/core@0.16.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-SfSkl857SJjvLagMXlVTx1tVKQGqpRtxCkldDOboDknDwRfx1lLeSfU1oUZucejmdSTcOUfYxaz3aUboQVN3gQ==","shasum":"f80a3a786d2e3b64fe88fe5a5f0dc4ba33085176","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.16.0.tgz","fileCount":27,"unpackedSize":206089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91flCRA9TVsSAnZWagAADfUP/iWqdQERAc2BedvHzc4B\niGFHwgOixjSt7GlTBOPojBrkcD7kEpLPrbFccmPKEjhP9/gTia8epM+E+olb\nS5Vfo4Q7Hx0isAdjeMY7O9I4qGjVCTqp4XcmLUa3nAj/9liZ/QNwFTKN/ETO\nycVO8lijwcNCtgs4wGkaDupu0tLym6oXEbMh7LUj95gOKkWffyAlM16o/ff7\nBN2lhOqMMg6vbgH2l0IrlkEpa9yp1VNRkORuwuZlfKPZMRFFhw402CsOBxhV\nQ7Rq4ScZebaCgVlJk7oCzKMIQMP24XMZ35Bu/Fn05ihs+fNC0AUW8ETMkwJB\nlnDFFasNPMsZAYo9MTKU6Pa64e7RUl4cRV7I9+/TWZIqmhZ+NSZCgBZI0bYl\nS+vHAjRSyMiecvZrRqUr2UzZDrFqzLf3QyMF+q//3dqlsyc8AKEDOBPzvbJt\nrkXtvGL2dYpLI95rAF+w//p4gw+tWI1Vw01x6hiDPglxr+uanXWvaibr2pZ7\n+BkkT5489S2q5bicGogx/rWOkFu0DrujbSSXF4zDb9SBQI4vlEzEg/fCfAz9\n8thj/lvjL4TKMuOCy6IYHZN+pdaCNTF31RAgdAfzUvr9iquTOJrcSd6NQfpU\nJ48wAL96uaM0kLozBN5+75GhHypxoMIdUvBmQpuYLYIJYHW8zFQovGzInGHv\n/k6l\r\n=mCQL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpBseUv5Sn/E3O8PlgqdhswDlTyBTylXsl52sELH6BJAiBPizHhiVZ+6ams9Zr1IeBRn99mFaID8MaNannjpxgpUg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.16.0_1576490981455_0.41660509567584403"},"_hasShrinkwrap":false},"0.17.0":{"name":"@react-ssr/core","version":"0.17.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2a322e5c475b945bfeca1374a5c0e66a2400ad12","_id":"@react-ssr/core@0.17.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-0AR2xTQc3m+44i5ENj8RngQ+/z+F1WrSC1CkQx9M6BiDr1DGtPxsJ+sfnkqsufJ6kfYDdrtM4rVQi1VN5kAReA==","shasum":"f8da459ffc3a3924460c499e4d9fa355e8d86f17","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.17.0.tgz","fileCount":27,"unpackedSize":206089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91luCRA9TVsSAnZWagAA/mYQAKLzZ9BK8/DFGoG2mGLO\nYOILW9iS1Zcsxqhc4VvpG27MuHFpTxgE8BqnWw/EffJHJo0aDVQHSsB2jW6Y\niMb2mDdHThszMVm+RaKNfK12gbz61IwaIxcNXUQb59d1gQtm0YsrY9Q+XTKK\nf2WSV6qTCSqLadc5TMYImIq3DpgDciMLKVHK4+FyFLjg0YMr87qzMplJge4U\nFXMKAD17BeugisC6ua+AHwVhnhz9Y7kOuQQvgBs3Jo2EWIffEsYs9++53Jt2\nTC7nAo5TdDurEMqa/3qWKo3XbtvB7hBpA2sKYzxypL8idDLExFqPybdwGi8w\n42r+NOuKfx3PgXe5WH7npCOXLHouvXdHwQJ5TVjSxkPD5tMv6IUTKVnBtpdH\nMi61zghSsiA4xTAmodsU+3YncSF348m//3h7q6RWiZlV/sIl/P2xVYzfoepz\nPXtw3BRezAVtGw0Xc+uzowpQBNaRzn/RNsvLHpIYkhwVYjqm2AbMBKgnqVjD\n1y0ZCxv2Fb0kI1AMYEtN/Ztak08oq9C2kO9kbD0npP2X4eH9/ZngLWzu0lpq\nSxi1n5u2nOtJn+q5GqlZJYIBAvRbR0LyR0ooYo5Loy1JpDzeB6R4vSXXHlNi\nxdcb16BbtDXHH4cjh49I0GHYwfI6pRyldT/sOfobuAo9XSvZkYSUWHiJstLW\n3taT\r\n=z8Jd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5vuWzNWh5OfNpI7PkG3m3KCSPmeFdxH/neKUJeyhnsgIhALsYTZBXyM0qzKdihMRB1e4vo7K8lPK0+astY9AiZ9cp"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.17.0_1576491374255_0.8578286579854157"},"_hasShrinkwrap":false},"0.17.1":{"name":"@react-ssr/core","version":"0.17.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","reactjs","react.js","express","expressjs","nest","nestjs","view","template","engine","view-template-engine","ssr","server-side-rendering"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2456d330f648f3ca92a48445df1302d4c4ae74bd","_id":"@react-ssr/core@0.17.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-YKD3HvOoVMd4dQ8KbUCWb3b/HY6JtbUIv35Aynf568xT8/0xrDPlUic1K8XEamOGQ1uw/aFptgT+FYvEQiuEPQ==","shasum":"3e10d8dd7aa4c0557bcd6c792f9adf7a6849b98d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.17.1.tgz","fileCount":27,"unpackedSize":205966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd91tdCRA9TVsSAnZWagAAzi4P/Rgv2xc3ml0J5Q7aF+8f\nONEmODEnS7Zx3E/smlAmLvuBQnIw4QBTx7bsXFl/1OtD/57Alz3fl2QgoWWW\nF54/iNNVidnbZ1IavxISz+5Mi6Z+PoC576lM14AckoyxvE3eUn8pm0T4T4LT\nF7vuNV2KW4NWREPQnqawoNctcwI+HF1E5olNZbvLQe8qNtdqupdSK/OrZ41M\navo0GUJuQDBG525jgpsBjajna3Kz8ZW04mjUhfBpqEkP0eGP7pO+cEofPYPc\nN2WYLcXT7wLCebONYmMV9AmieRFkj33GIR8dks10k/RX3gecBZfTCpr4YFV3\nsGnAAeaaZEBW+ptmzlQfhlKiKLq0Mcad93tZfxhvOZ9Qw4510Ia6qVFWFUi9\nePCyWvHjXDxLaqDEBvcIVsYCyG200T8TuXPee/soEQxnpQoUiA5gmth8OgFI\n0oaJwHo3tov4VVrxb9xfgTsLpvUTxNyIcdSQJo14Wkvqz/XSbLS1poP5Pm71\nu8L4ZMSGxg/df5K2T+jhfMKPa3hU0aFcpMpuNIVeyT0yUGUvusWG+AVzQ3IP\nui91l1L0GW0kjkf4mS8JLOYGo2Hqi558nndlinbbupqAyjgQHQV17VUFGohr\ntYGuoPEwJ2/nrC9Z8K3rVblC+abSdndoHhrKz4pBiu6bcrG678dNeacRFr3Z\nzeyM\r\n=6UMO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1JTWGXwdMNJl7Y/aRKQR+0W9Z7s1UImeXqoEvbe0IgQIgNIj6eTha21GSsFKE6ifw6BUWVps+MksA1uGHeBkRsXU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.17.1_1576491869154_0.8937035920558554"},"_hasShrinkwrap":false},"0.17.2":{"name":"@react-ssr/core","version":"0.17.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8d91b57b3eb3216927c6995714b09688f701b77e","_id":"@react-ssr/core@0.17.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-2i/yp/Ggm4YDIYioUrEyNATuNvMOOuH9Qj+cHfnQjE1qhBlu/v/XAKDzh8g2LUs8sf6WgTVlymZ4TIq2zMdstg==","shasum":"b95e69b8110c5e72099e5d078e33cd20d13b4356","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.17.2.tgz","fileCount":27,"unpackedSize":205895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd94NwCRA9TVsSAnZWagAAjqcP/19xmkGM1bG1Hk7EpmkM\n9OyQ4VvI5fj+RHxw3aC/Kok9Lo71W3XHlKNt4+KpuKnoc2LWCFVUt1WXfGGc\nz9xkRfBYQsXLKaNF+6VRsxiBZskOXAjkyoFwXrEvQessRenyU/kuv0AWZxse\nIZ4VUFayn5iOm7lQKg9MnyUh6wZeCiGc2E9u+v4rbwheVljMWIIrxzrnpT4m\nl3qn/LGzdpDbnc9uiRzMwyUkRlIScuCC2Yjc1zs/+Ea5qXKj3DPG+T7QC3DY\nPlAEwu5Wrq/Qd5OW7SocPPG+fTQwdrNKDMIrwbSmUuSUxuBUV2E+49xmdGJC\n+QDVuPaX58eCA5SMk3GOwjwv3zPjqeEWDI2Et30Id+l9b9MKu/ub57L8xdsM\n+Jl06cxD1Z8UFkL4V+iw+2V3FtHH5d7Qrg9Iu0pF6Gitysv4V7uGP7S9LUy8\nlFQwMbLYvOtxjzKyEsesgbdUPjCDu0kRUNZvRu8LXrk5doAquFg7JnLcuMYC\ng4+AWsTJ7ZnBvMTrz08KuoOYqAeUhgYgc1X8w1i3y0ilY4EjQkoBFC4tovNO\nkRU8FVk9rJGJALpC9gyLjdbJ27nSoUIsVMj8wAFygECEWv+axx+uNoeTlWBm\nxb0TmiHrc4AFMddEO+Y94AHcepGY4qsAL8z8vC1MaTnm09HpI2mS3SCF+D2a\ny8LT\r\n=j6wC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwCkt+TfL7i7J3VJMlZYpCicL2g7GdAJOIWVv8PW/FDAiEAuoi/RzGl2W5eHdMBFBQmZZBMOtuynSqsjxixoA98PvI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.17.2_1576502127899_0.8678151746435059"},"_hasShrinkwrap":false},"0.17.3":{"name":"@react-ssr/core","version":"0.17.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"21a23b2b8594874132014865f62d400d9dcc7d38","_id":"@react-ssr/core@0.17.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-WuMsoRv3b3JAZZvFEWObjQQTvyyS8AU35awizm49patm/l+E31pHcjn6R7Iq7XeKLIWbmKDwok+MIWs7RlA86g==","shasum":"d4aae1b8cf8bcded6eee9eea1dd35d0f09780734","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.17.3.tgz","fileCount":27,"unpackedSize":205894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd94VWCRA9TVsSAnZWagAAw9YQAIRC7CjtqO5RdJdq+Pm6\nkly8PLf7RuKqmgWhkwgmOjdS1UdtyM70iOF0PdmdQrcRPHJ932eQbLlVODZJ\nvl2m14Kn5wOItqKtM8ak0DNvYvQLOpb+b7qKrpUYk2Amq6yFRiUaUUoJPcyf\njFUUVRzl8ZgHip8yhVq1YdSzxY/FkQLXPwnBioUIZnPzvUzOcSSMeZifL7N+\n/c/9BjW0gSssqtR9rwe4BwIxGvNHVOC5LnTp6f6/aEZ5dKuMnh1WFHiGt8+2\nGaMQNd1l27P9rWFlZCoOFGaQlk1n+mG8nbz5/OVbL8fAbaCkCGNNK5/tM2bu\nXXm0PstcfISriMSv0Hs7MZRlhdWecnzUJrBJiP+miquRtUJp8RnDFmGfPOEi\nBn6hskcsPmxuVLphIEe3S1mZWb1ZpZfDM7VGbou8R5j1UcIL+XybZk6sTJxi\n/QyMqThvM/ZobfnGwogAok3ERhnLzoUKnO5eaPCtZbymAm4oVN6x+OccH8Sz\nEqOMRJkht8WVs6HB/0DN5aN+I8hhCvdDVQGJhhuxhxCwZZ3oCmbo+dgyKKpH\n/pH3cwZqF4vo7pDvMpUfhwZ+g/wIU2MtRs6SVhBHlMs+lWOUqF+vG/QFoIqt\nspZwVZALTaAH1RctpLmP59S0dxBAxbtieOZRVDNYTxm9bSABbOkMduzeZvHp\nohYP\r\n=p7N7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBG3gFVX3GSb7NfXbyR0xAaLtmD4H307kl/9LBMpR9nMAiEA48RY+5OyoxiHFH/I17eku542Me0NMURCZdckNzpJEqY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.17.3_1576502613701_0.5265572827537321"},"_hasShrinkwrap":false},"0.18.0":{"name":"@react-ssr/core","version":"0.18.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"934f0caed6cf3fc0e8f9ed59465a141549339dad","_id":"@react-ssr/core@0.18.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-14np0Kdfq1CFX5+Be/Yr3q0ymg6rvvJwfJ6aWg23sILfYdTpvEYIdyEFcVMbyTraz3H5Y5BLc52xr9hvz+iPcw==","shasum":"c59b543ec7584e333503751485390a347ec37cc6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.0.tgz","fileCount":27,"unpackedSize":205926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd94mCCRA9TVsSAnZWagAAeDkP/13xr/WV/P2jA4siyVV6\nHXcFAp84IZHoO5ZqdUIwWzgMv57qcN4kyfO7SOGEJ3dPoi72NbthHQmzqucT\nosvbxsXHIrEwvb2Vm47Am4PSGVX05/CF8txpNy25CdNk/vDDQTX+XR+P5Ynm\ntx/qR6cD2hGcnHwU5iRwwSdCIq5mVSmmyBJ46p3+gZEHQ1AV4mPGRpSrzme8\nsfhwL5g/rl7uK0+RCgYQXP84RbpABDGsaMgIVhecBf+lUI7a9UJCwoZykAfj\nhO1jxoCllkNr9NYtxVoiZtp2KT3i5WfI3KnPNPgvlf7kRaC20jpU5j9oixEs\n/uJzD0qaXt5RabCyJExY8xLx6cunfzZc1Pu1k1oXTVNHTP9xzC5b+eMB38XY\nVNJK4ZxIURm3LXGTu0nnBtUYiAcpVUsGBXu6c7QQTDYWMJO12N7unjaePLLy\nj655uRYCfv/u7SJMhXpNZ7oTerjKUDXZz+/wyEFEQjdlCII7/XV20E5nm4wP\naXL+FSc1B7z92skWXNp4NebxWxLWjIVUGhzcQRjgn5LEng06My+qFpC98KZw\nTu1MvnbS4i+TCwQAEbR1iaNoAfc6X94XROCCkLtOXwN+As8G7hIk4jdqt/35\nVcdd0RiZiaK6ebx76sFr9RlKJKsHa3SwTe3mGvTtv9xe+0GuOnFRx7aaiTdF\n9xqZ\r\n=LQQL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtZVcmAJnKgZXVmt170aYe/IgLXRa8auBCUM7s80Pn8AIhALIbzpbEE4j3he1vQ1lA6+SOkWfgpn+5Q6N3Ek45OsLR"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.0_1576503681563_0.6612134716531941"},"_hasShrinkwrap":false},"0.18.1":{"name":"@react-ssr/core","version":"0.18.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b2e3321b4116f275a6b9828f38cf7a44ea9df360","_id":"@react-ssr/core@0.18.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-JmKqeCyW6rtaoX/YZKkWY095NrJyIq+31w8M9BwdIOOToH23S863Dq23a6sheTg88cizD6tD2a6Tb9tv8OYEXQ==","shasum":"3f328e4ca69480719d2f67cc4c20c124ce12cc27","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.1.tgz","fileCount":27,"unpackedSize":205550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd94xNCRA9TVsSAnZWagAAXOMP/2fEL6TxQ8f/eBP9vAmU\n1Fo22BhG36lQNryV0GvfKKJIgMR4d04RGuh1pPkngduj0C5LQ4v/sB94guws\nOP0IY9SNwJvp0b5YP/Y6xJxKx+9FsttckE5Vnlck1MK2N8zTdCbOMI6+xvLc\ncEwWt0oln2Qn1xfVZ9zNTaWlNz3fsZ3gICDWPJzQFTwy7Onck71JGCTOxd0L\nGY0M2pk9yPDHWrpuRMuCYoIAbG/uV8p2UpQtjVtVJ0yB2QPha889HlI15mPJ\n+7yZz8GW008cdIVd1fEiR6cP/kwhjh+ks9CWnoiaxt1LFAnJnZ9eEba1xOHo\n/Z3eADg4MLYIGl4jaewwiaR6RO2OTbjBG5cfawdHBl1qs1Ow0TsmqhTMzb0s\nfIUxQ4dqR2FRTw0b9wCHfheERAV7/V8juW0v2h+D1jJOS6cObJ/ZRBEV2lnP\n7LsbJPASGqsNs6hS7s7u1GzfNIrNSGyOn3EEe85jiZiLMjoKx7VCbK0CTokW\nMPV1jP7iepZ18Vk1ILIrD1CJzmWISgv8sUa+cNNvwiozX34WdMTCx7FTZx/C\nvArdtAFWuoRdRvel8Qags2wIZtdgk7qpsh3Y/xG/t2CMKf3T2qUxnP2nPy2S\nFsN1NRn5x+yK2nghksV6sz9rTJSkq9dssZMAaPQbTrGHgQ/yh3GPjD7a9bK6\nHDU2\r\n=tQiH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCsEN75iGNlcStVp+WbtnmW4BXXyYu/ci7svf7dzHqnwIgWCeO7yHbly1lhNd5dgYdK4EwXUqjfwGGQvwh3jkF0Aw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.1_1576504396565_0.643302180488379"},"_hasShrinkwrap":false},"0.18.2":{"name":"@react-ssr/core","version":"0.18.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4c7dc92cd705d27c3ddfca986154a1d2b64136db","_id":"@react-ssr/core@0.18.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-kqUfW4gTBE7BKnrAGQjQyMhyVlEUmVcQrnvdY0H3NZlI6UZRRcSQlYn9AYrUCT7Tuyh+daiBkzSC2naKPprSZA==","shasum":"03cbfaaaeedcf6f05aec0783a9cf51000dfb6bc1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.2.tgz","fileCount":27,"unpackedSize":205664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd9/sLCRA9TVsSAnZWagAAKK4P/2WzFAAUaUptFOivYl7Q\nr3pcuyn0iDIoCJ4QuD22v2UJO5/5h+exPjtDqLMmV78UMgkpPvCNfekO0r4Q\nWZNYclYDXmmBqilo/A9M0acakhwCDOlb7AYG6lz5s4vImTciveti06bDcsRS\n6p0OxLvlLoMsHRlpLPcIbIaS9eZQI3GV8gNs9hQn+l2Zdikw2jA1cYS73Hpw\nK/QzQarQ8edSZP+eBOEnZG8/MMvKO9yXwn0983lTKuM0gTvTmT2Z2LCTKZk6\n42vzZmFqSW6CK8sANBNNjzKc+Nk+dlyiBybFr3xEss01O9jYP7cpoG6tPE2+\nHKJZL6l33+HivspZflZ+7IQ9DwdX3hwdIYyl7hNyUblTB01iA6Y15bCWF8zf\nmucjJJsJbIHusF5r65tPVPLdcWcZUPootIjPGx6cpR75wW4Z943wSNGlWkfu\nl/qDVAalPmfVbfySLCHho2oJk/DDwD71voGJArNZxb1ReYVHJtAf2ALpyQaN\nkbYmX+QICBHMHwzwmXBD6TyOmCexdYB8ZYMH1ChLkjeKBfdAb+tByF3wN/Xb\nPKQJHWjSsLH8XbrDj7eYeBkT6hcCp2vWPDzR6lX4RB/c75onb+q/irOv4JyN\n5J9OpO7NzpZ9CqzmR7tVk9yybaLQZM9W0RezS91S8k2lxRrph/CfspIMsdQx\nKCAr\r\n=ieRC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/qL9ncVaeCnZO33w0Uh/zrDSV4YWIxEh8+XIFhK7UYAiB/v5UZ/W2UEcRSCoe24tpKgNQThqalkSYMg/ChpXMXKQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.2_1576532747450_0.9501984073853014"},"_hasShrinkwrap":false},"0.18.3-alpha.2":{"name":"@react-ssr/core","version":"0.18.3-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.2","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a8f14af095bf0ed1d458a6b404939a37702e9e4b","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.18.3-alpha.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-e31gsJNYSWGUz74sQCg/LQ+LzOgy86UF6w/CDkfO7u33CeewUy3jqnmVzE7dVtu5kjAw2nVnPT6O0xJvm4ydEg==","shasum":"6c2db20537754c283ee1c83d167982ec9a5a69e0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.3-alpha.2.tgz","fileCount":27,"unpackedSize":205996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+CJFCRA9TVsSAnZWagAA5CwP/imn0JzWaMr03hww/Bnq\nIpm077j+785XE+JYpzqEtyeSw8J9ElXwoGOXyijoL52IyypExsB28Lk+ZnoS\nkKjcOqQJTGFntcKcLvfRBaL7Prizlz9vw4dvNfNA7lOQOe7dHplgCb9IrblQ\nIiFpyCZvh5TdgOOeuyKFKJIern7jYQ71D8Zq8I7r2BGbnrG1QFdYdpzdA1Uv\nnJfueUDt5olQK6DICAQX8S12iIk5STRGwoeFiEQ8K47d5uxzUqDHNDfEP2qj\nX52PKsFjsO1c5fP2BXp3Clud1rAwrIjrYBYsTffvStbbgRvgX4NPHFVo+Ov5\nznzoRjmiD37hrtnzZ/KzMDmDhu88obvRut//xKogJhQ1h/ZNvrEN/bsplNTf\naQ1kxr+wTxcATPtP9hK9fXVEVG196pMRBWoiMC7s9YJk6+tsYH6Jl3+Axcal\nRrGxlYxo3255KQFm0EuRhRkW9W9XcvXlyVRJatK/KEf3hAvdY/keXMnY6tZ5\nEgJk+I1zyxfj4+SLxsvpRe4vuvsl8SLr6q7q1IlufO4DDK+8rzfn7ZGOVmdM\n0LE3hYYLo2lV6CbscqEZoGv4PAUTeyG7qLppu1fFkJXjkDHRknpnuIbN+dxi\nECUZh63q4gVfcNe5ag1KCc2RyWC8FDdp/ZTXP0uza7FR+xETq94k+cLikt/w\nKELI\r\n=e6Ye\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDT/2suzxuMNXLIyNpgjia7jnmfzaVlGcXC9k4lsg2d7AiEAs+l9CbAjcfxFPipiYmPEEcIkr1Na95lZ5VuSI42rJEs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.3-alpha.2_1576542788991_0.8324488567590351"},"_hasShrinkwrap":false},"0.18.3-alpha.3":{"name":"@react-ssr/core","version":"0.18.3-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"26947898b2ddf42558801f041bc523147865814d","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.18.3-alpha.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-K0dw9f4emlexPLGFlZ9JctrRJ5p4ka0U2rq/VzehZYPo/2qfkkzi8e7zGbzI7VgOxQ79/8s8DZqU0wDStmHn6g==","shasum":"7d2d836ea2a43e2a8d4a71f29143a275fdf5f7dd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.3-alpha.3.tgz","fileCount":27,"unpackedSize":205996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+CLjCRA9TVsSAnZWagAAQ3gP/jswLNFP9DjbT5i2Rg8c\npjjqIZHjHyIjD12h0/VCCO2/vKUp4nl0Pa6SCmYMtFHr6LkVZPSSKeJs+iJd\njlQK+N0P65nRPbc6JWKZ/2DiOUb7UFNMD7qXF7Lgwb0+NajJOJXHHRWj+kH0\nncw9k3Bq5nxBy2mpKSYZ9RdvgpwILbHwnjPoXw/8icU/VU50I7tsZKMYNDG/\nzx2EmN0XxoBhesH+cmOYcklIGqn6JJIbCQXf8pkyqbYVvaEixIRLpqpntg1q\n7J1k5hZlAq/xTlPreDMfWRvX/4QVRNSLKJLh0Var4+qjj1aKepaolK6LFBZG\nQD++9HUd+9YpsjCVyreTbqwcYytN0+9FGUQwl0ct6P2UnfkvQFBm0k+k9lG3\nAUng6u2Sd3Q4RDRpWMfG4qPyBYqBGCEkN2fUvLvAXYUiZ+fMIGmL0etGiA2B\njdinc2oHKBYNwDpZnDAIGyRQTthJE3rVxbDjCOSe6aVkSee6q66N/RjFN7dL\nZxj91YvR1rPvnVY+iG7W0HzjKXA7wPrxyfeshl58kHHRz2Irvx6TR6gculzy\npfr6BM4oTJPejQpTvi8oPykr+4HT2sPmeKGx1pACSzeENWdpPHoRGoq+YB6D\nlLCRNJHnGvmRMLw5wX1KWcx5XwaHCD6NbgoXB7PvoNJYd50OA+mXUYilVeoo\njgHv\r\n=2wil\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCarvmF/0G+QckCl6hN5phPsyYnAfDDwW2MwvEzE2DtcAIgbhON72OFZmsKrqAwXakFbZSHXOXEhnR2REcKJfSUDEU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.3-alpha.3_1576542947391_0.23060961856008033"},"_hasShrinkwrap":false},"0.18.3-alpha.4":{"name":"@react-ssr/core","version":"0.18.3-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1271b66ca6bc99bf9201b07ccd8740898684e077","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.18.3-alpha.4","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-LF/FxO4VZXjsUwflObAQKLYyNg/n7eAGZy4iM4B6uhJovuuqQUfk4t/hzECpUDyw2c7o9RTw1hiPCGPa20Ma5g==","shasum":"15861eb0a9001cf9c3824ad83c0bb47fb69587c3","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.3-alpha.4.tgz","fileCount":27,"unpackedSize":206014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+CPtCRA9TVsSAnZWagAAN4wP/ArbElTn3ElY9Q+n/ma1\nvYdOUHEqDKzugTnO5nhImfn3kAUn80kc5uVWfHGe7RZHgcmZEAL/sPlaE36x\nv+P0OAtaUEh+KRqTKlaPpGjw7ihOUZc0l00KhjfTB0jWBQKty+lqq+QGKg9h\nuY1KgtIO1saeK4fq6A+hWWf1I64DmPQ2OrFRxHuCkLCOnS2eL7DKJug2Jje0\nG6ROwqdugH/ev0yxi4mmlNRzQK7soS8QV8nwsV3q6Lj+aU42Q3WMMZ/L4YWA\nLPESDRhsPaER+8+YGKwSHXoXjB/aGXrwBpoDkkaUt3eaNRltN6b000CwOLNs\nLAvqEXQLYEj1eG1h4NrwUguxYEtH2t654k0EwitTcXd7MXqQ5lf4NcDKuMk3\nCS7AOxbci9wSqxdHa4tAlW1SCOLn6GrGJKodKTo+ihd6xFI9bNtXFJIk5Bmb\nqYKfd+cWACt0R0XHQcYJeBBGwFkhcd7e9hA+wA+AFlHP8M/Z+7D8FtwOObIV\nG7zTlyMc4wBN9wG8i6/D5O38bOUrUUvACidQTUMcSarBHaaNePoCVquaMB/z\nggJudU5bsQg+FE+QXNfWnDH3wHUlB9x8ovA0Z32+sobav5YJ+jUc/RaAQroH\nyFKIRmTEwaGYw26KXKlX71Vr5rX0WMP/UicB5KjMSwT8wJVBM0X33z2L+aqA\nFYGK\r\n=IO36\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDci5x+aSgfOUItU46KRpAw9lgWlBZ0g6DyqOEf1ejS/wIgUczB58FndjZbkzabiiT62q6m1d5ElpPAo7I0C6Svpwc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.3-alpha.4_1576543212742_0.8474060889928012"},"_hasShrinkwrap":false},"0.18.3-alpha.6":{"name":"@react-ssr/core","version":"0.18.3-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"70de51837a10cc34e9c923bc66a9834be1bd1483","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-css-import](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-css-import)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.18.3-alpha.6","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-uTvSzn3+AdbQoY5w9VXBOb4TqVPiEt18SJ3xjPfBwuozmuYcjR9sd5k7ejox67xNYH91YlPJyXCjcZ0W3QVFEw==","shasum":"35177a67f829859180a6c4598b72ef1cd24341bd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.3-alpha.6.tgz","fileCount":27,"unpackedSize":206007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+CZyCRA9TVsSAnZWagAAoWgP/REw3dKkiaAmegcFGH2O\nH5eaAFKY5Uxvjxn4lRjgyy21LqgwM/O89QURrOpWRlfbSXNLRv4GBP7ACVuc\nV4GtrWkf+YcA0lVmWQ5EETDuNFddpuf8/UVeEbEjdrBw0wgdk072lW5N1Edi\npXj8ri2u0l4AV9QiwgXUxqPGboaO7Sarvj865CzzJYxyvYa/wPb4Ra/EF88u\nZ88yB4tRmzNXoCqZp3yEY80bmtKoVA9HLt7U8xH2wQkS2Us8bxo9IqCTY11Y\nb3X++QyfowHl2SyqkEJ8cSraZDdrKC2BABF1oMXJmIT1rKhxwY4LGILRo/EU\nCHk86EFHszwxZEc3OX29screRImI6hiJYLp24cRKNz+dKEihaIolCKT6UcJ9\nUfWMwOJI6rSugrSWG3dDHldE2A4YMI+mxhMAqJxuLcdm44EutR5O1l31ZaLd\n1VrCq3sruG8Za3UUPE/RPUphBrlI2eIONFHY5Atgls4VMC5OkQ4Ei+bgLNd5\n6iz63WpTfUrVZCd5L0ySmiRCZBZNNK+VIKr7l/9TgwpH6ushct+CpixvN2rK\njGHguYgS3ao3r1CcA4sVOVKKSzOQPN02Rl8YDV8qoSjGU5t6pceLB7NsBqWE\n39QVkcCXVaXE0cTNHYMA9R2giX5AS4SUV3C4c0V0CQ7YEjvvBD3GLQkZ7Bh2\nA/tB\r\n=oko1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDer1aJngHinwRW9v+qs8xTTpjgVKsZgQclKKigMUxyngIhANRx07cQsYRz5/weWbr+1mcWAP+STVcLhoCdEdwCwY+R"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.3-alpha.6_1576543857676_0.887045500096292"},"_hasShrinkwrap":false},"0.18.3":{"name":"@react-ssr/core","version":"0.18.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.15","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"93ef115986502169bc9ac91943d4ca35c3a0cab3","_id":"@react-ssr/core@0.18.3","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-eB3Jkj99efkecmhJtoCmUoC3AnWI36x4vz0krtVPcNIHiLaDAgPqhkCJ9SyWZdKm26jBjLTxy+n2avqldh5UZg==","shasum":"6043e8558808952b37cc0b449c91fa6d0c961d89","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.18.3.tgz","fileCount":27,"unpackedSize":206092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+CnPCRA9TVsSAnZWagAA4hMP/07wpDSeR4LxcY8zeaNj\n+Q4kQom4TIaC9nTTgviFkTaz76/Q+E3dwLGUmbbsR7cLzDrgdai/wgpN99ND\nCNgEvAIogZ4r8viHsu/+7GOztH8fhFMvFZrIhgUXifIao2T0qlnUcSOsTy8r\nBQXSo0wQAhAa3aMQLwUHXfL9pxOLPl6VOoTlzfbPkIwIe4kbq1wTzDohPHx5\n2BEpN76H+ytB+cbNVmWhccrHxAuODyf57akwkKP903wx8YMGkfd8QmIA2lML\npf2DK2zAHgV6/O+B0Ty6w/NzqFb38zY2SnkZlz2cue6HTN11RokKDqSIP1pu\nKuuHrJu//MD97wOo5DXPlzHQYocDwuwcTaOaEEQcKtOD1ef0q++k8ItP0TgH\nbUL8rZK1Lqa2X3UWxTNeZTQcgrrXp1t/eI3fbtD9foq5+Y/xp4KT5ceCXxXT\n+egWCBuWsBrpFBxuHhwU+bVShFtTgqFPrPeISxH/qST6CuhrV7tLMFY1R4f0\nSYUxXwjLTsjWokGSQD8aAwt8DKOuybZn39WsPZrNMmGILHxXHZgNfQsE7VMH\nniCGUA/uiZTmxOYPVhRS+S073UK53lAq9+smzICHrwEEeovrZpto49ps9YPe\nE3lWjydgkqZOfIpfg3jJ77mZ6cWVdLT1PAD1b4yo0zytyAjdfOMLMOvQkMQx\nWkaO\r\n=VDcH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGu++yGuvaDRYIT//IdntHxc/ecacmfGuieS7wtH/gSCAiAK0GX5eg67negFboc7lUXkeGT5VXo4pE2Ldrtra7f9dg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.18.3_1576544718781_0.25034094195615"},"_hasShrinkwrap":false},"0.19.0-alpha.5":{"name":"@react-ssr/core","version":"0.19.0-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"72b6b6c604b49d039761ba88dca5fc3f47ed486f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component\n- HMR when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`./server.js`**\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`./views/index.jsx`**\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`./.babelrc`**\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`./tsconfig.json`**\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`./tsconfig.server.json`**\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`./server/main.ts`**\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`./server/app.module.ts`**\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`./server/app.controller.ts`**\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`./views/index.tsx`**\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Examples\n\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-document)\n- [examples/custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/custom-views)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.0-alpha.5","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-/y9EgmiLYDWUSpCfRxm25sANBw8c0rHmIBVIl6onLlI1No6N3CPoOjlBjqCN2huGVPVwu9h/MfegY0u616LkzA==","shasum":"bf457b559bf142dea561770a020563e4c29d762c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.0-alpha.5.tgz","fileCount":27,"unpackedSize":206216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+GDDCRA9TVsSAnZWagAAslgQAItmWthnggz6sINs9+H2\nK/eDRMHpfP/ScCxdxHZ8uTCej7oIt0QSBV2/PNbkCFazWAJa37m++LDWk4+8\nzLvEizodUuLqY/lMYfFECrt4qQQLFnLEE3FUA2HN8vzS5ld9tmI1LssRtRol\nwZMesYaRvSqCO/ntX6uZ5DBb7ROtCzVLSgiiCz6EzUfWkJWjalFsaF3r8RnF\nUbPOLq/gUCrf2erVCtSO1yZX1ZsEx/9tLopORcJc2wJUP6qInxUggoI5o6zG\nQRB7Nz1OlhKC5cTdjroZtaJ9IA5lHS5MIwY4T2JN3jjWyaZsxOUnJtTbMC7m\n6vRnN9z4ENWLvrVnwCEtjBU0zHkKxDfOnfJCJqMDY404R8F5q8F2qfXqZBJD\nWoWJhW0L74u+5O5PS0WsKnVlk95B7yKj4OaVFMKs6E1T0ojkS8zMiaPCAXAP\n9KOHhb3je4SXqJx2kMWPu+oZy9/9TpqHdOvsmZ/iEgHMfSX0Xkmv98MYT0G3\nVky1StwF1vk+zsBYH2i/Egx/KlZCoidxXZDoH5H6lm1YTI/iyyL46V6YhaJ4\nOhTRud9nL3YmTT8rVMhh/8h8bdQSODqpb5v6OyBzYZdS+A+9WVlvgKyMBgfR\nzcBSt/Ptim3FfZT8K6GHbGsjILh+dQWhpgNMpPZsmaCmRlok0jzy2xDd5S8j\neiAy\r\n=iD+3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKwCIq+AzRjy9OMlm2q1CPLkAkvlk0bvIXcrYMkB8lqQIgRoahN0RDKegmUOvzebWoBGUXHSLn9AVtQfkbgmGVPYM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.0-alpha.5_1576558787448_0.4915045268213465"},"_hasShrinkwrap":false},"0.19.0":{"name":"@react-ssr/core","version":"0.19.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.3.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.0","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"41fdc1f6aa9964a82b228f83d11e8a50f50774a6","_id":"@react-ssr/core@0.19.0","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-sKyhEA1dLOMWpWl3SoiKJvFljIviG0+sURZWhmDewfsQA35iMIK8J14WTsf8pBNiOCCdRhH9zMSzYQyaegD5mA==","shasum":"d55d6a3e17923572252f8c9fba5e0c188643eb8a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.0.tgz","fileCount":27,"unpackedSize":207458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+Mm/CRA9TVsSAnZWagAAe+EQAI0Uo1SO/aDfAJu4emRh\nz8pfwCPgp53mUm+ebZ6RVkfmFsgv3qxw/K8SsYWR6L1k+pDtIJjnSA4tF1jG\nH25K9P7oEALEbN2ZOjwu22w36xPd43lr8809APgA6J3R7hjE7GJ/rbVefiPe\nonv6uFNR/Mw/FgcP+vCKBgzGj2ZEtlpKZW4VMoN64Iz+IV3ZDlq5cfgVNdZF\n+M+wdMNttqf9gPrHvQn7jVmjs5aiw9Fc3oMnwVglxMmeHasTgMi3JbeCvc5H\nl3VB/iO5h4AQiALrM9HAD6uFYedZ0gC8UjjXVEoGW0VY4Yu82bhDAd68I/bJ\nIfzP+pKTyyPGfe6Zzd2h9xt7vArCdjeXaliru3o33/1SfaKdTsfHbgciulfz\nip0DnmSElQx5iRk1yQ/ykBpekT0WpI0XDdBFriMO46s3W1roCRGy3aOxnFZM\nVvibhHzTHc09GdCaQEKL0Oj1p7Pcqj7BNGTwIH2uaFPUcJKZTB38gjo+0d5r\nthM5vHOuRKIiIQK3gh6v7CX/unGhYNs0VketXfG86TnrvpE1+jlHioA05xab\nH1qmzuXowcPw3NXgvw789j0ELDxRQ5Lko+Nz99Hv0YJ5JmKMJXCNPcdSEggt\ns8W2UCzJiwLVsMObo/K/RQlLpLNM1WVMrFf81uZJi+XWAkuZS+JTiYedfgnu\nGjS0\r\n=Ti/d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEfLb50YSmXCEtoC8kYDDalyFAx9PKKCZeR4FBrJFM5lAiEAgswneyOT9ssJ9ifU/twITHthgFlzlkkNLTKO5W+Cftk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.0_1576585662604_0.5469274526743746"},"_hasShrinkwrap":false},"0.19.1":{"name":"@react-ssr/core","version":"0.19.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0adc0bde4d9131dbc4cf8f10986cec43afcbab62","_id":"@react-ssr/core@0.19.1","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-v8DKp8hItq6YknUXzLT5Av7ik73y1EhTo5ChRGNmMZBbjRE62pc3gQmQbJ9T+MCON/ifkA8Mn3bd3ZhPc/D3hw==","shasum":"071551341663996c2e18ef0d58a960a52ebf8ac5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.1.tgz","fileCount":27,"unpackedSize":207615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+WrzCRA9TVsSAnZWagAAqZkP/jCw+8KcpLcZM8CWyfrU\nhzr4IG5JCSBzmZBkk0wXUmcFdcBbMZ2f5lH82LQKNiFLhMoHyk5WEbqf7+9/\nyiPxbZ596k1jEZ5nWScIQw4XMhdXGmvbKgXjAMZNJ2v5Ax85sZ30isEX8elg\nDCY/f9XmzwsutWk/CE5oGfsnYKtKmX6GdKwfSYdFT3LcJGIB15Y99IFsicnf\nxul1txSLQxN4GcalvTIqz93VsVcYllQrZ5WQ6em0y6xv/yOoRUeqXp4URmam\nZpDdFQStCSBJfKyJjoDfesGQWDckPgkb/XCgFdcWasi8fJ6TRZsZYB9oMgF2\nqCCSQdGtRxxbSNTPR874AduCJGA0YeQxoK5cOn14WyMXnOMT0cB/p0uZEA5S\n973hlAIi/QPg9BjB+uAoRqH+wsKmtKaEfCs9xBFuSinrZOY5x6g2LFlx4LSq\n+OdYrA+gCIG/w4SHD1Mzt8BuUg6tyRIhEbxr29V6C2GXpLkelLL8BiyzvZOd\nnqQNmcbsUWcJQo3Mbzz3jqoaAq0hVwm5bWj9N6Y/2dmrUpPU0PbBdDSYMozW\nsCO8dZBkDmBZxI/DQG5NhV/V7Ef4w8I5cYxRHmpXH6xaEFzT1TF45dUfZ4d+\n+nzutUM8YhcRsfiESRN/6zsZZr9/Kpv2g/nYnbC37Ois3xG0Wcjrxe54/4ZG\ncUhl\r\n=OuAt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMjz8cdEQjmcQCrGOMXmV3WiXRFBEha6lZo+KaYDbBRgIhANcrK3XODIqrXk8BTzq2DxljFfU2Qtj77C6bSHOB3e2n"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.1_1576626930870_0.30624320072930433"},"_hasShrinkwrap":false},"0.19.2":{"name":"@react-ssr/core","version":"0.19.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d413aa845be5778e5be729ca8e95ca1c85a0eae5","_id":"@react-ssr/core@0.19.2","_nodeVersion":"12.13.1","_npmVersion":"lerna/3.19.0/node@v12.13.1+x64 (darwin)","dist":{"integrity":"sha512-sVwn4kp5G1Z5Y/pbMzeYC+oOFSFuvC2zW/wToJoBVVVMsp0fOUE4nsYsp0UOmHduof1YeUhsALAlClyNepxZWA==","shasum":"8d0006e2fd8c367f9cb4b797efe2ae0ec228e657","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.2.tgz","fileCount":27,"unpackedSize":207957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+ZvECRA9TVsSAnZWagAAZlYP/iVLp7UJ3CCUGPlvRh3w\n+G42uiwpyY5m3qgzv8/kTZ1ym5QBV1tGNe5bpzCthOZx9bruzP0CpOPL/UC8\ndouyMcM1PI3QvaradO2B+RJeVzc6fi8W9YhJsmgz1+BLiShCNA6ilO25Ap1U\nnMcOsHu4ZR3B6wKeqkA0pmb3miGYRcyOo8N7hsmY+rvAZ8A3r9/ce/FxMqaM\nrQHRCeknFOOI+hqS7TTaf0sC9/6hQNaFsMR63lB3ZqDbTrjHkG3nlLobuJXM\nbAQEaxqy1Wr2JDrr18Y0wYIyPE7YqiOewqbRXWf+Osu+lsDpKrw7nRYtv76/\nYsyYi9H8q31BDj1m1n+W/JmrG1F4t7+ara3nL1uw11NME7qrnMnTgJwMFX4Q\njW1COdi6fwlyFXeVW7mY5xjEzKNm1BJ9+Z6vwLCVMIVHljez3wWGu6A4DHWF\nB5emSM7Yh6uF0byc8/j2nVmuwDs51dISzLXwgpdXVI7I1xf9lA9Y3rjnXZwe\nwpVUdwFXccwlUkccdODYY/AMTXS2Q06oIBguQy9SYHblbl87YPyT9Lygip8l\n5Thu6Zpoi3A2y+mJDIeKYlXcYeJPr2N1WJfwEmaLtpfG0iKKswF73lXioyeH\nZChNySaQR+Y3o7PT8+7GQvn1droOd7D02v03KtVzCmoeYRUBTC8vFZxU+UrT\ng7hH\r\n=MfWP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt8tEiBrf3TIVs6zDLXKAwQBeTpB4WzaNQVS/ORAgKVQIgZm7bQ0erV+vnVSK9kVwFHnZs/jxKBJU37z57JVSIhIE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.2_1576639428176_0.6677248322181719"},"_hasShrinkwrap":false},"0.19.4-alpha.7":{"name":"@react-ssr/core","version":"0.19.4-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ec4d6d825b0763d5ba42dc383644eccbddb971f7","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.4-alpha.7","_nodeVersion":"12.14.0","_npmVersion":"lerna/3.19.0/node@v12.14.0+x64 (darwin)","dist":{"integrity":"sha512-K/IZdQOKvRnzUGHQ4faFTjYwyW2jpA6ooZ3peQ5zFr1CAoQVOLYd3j3GCDt4zIm9C159uTX9WHF6zmrNCKbUdw==","shasum":"e75f5c340da91af7aed4a4c4f0fa10f2df77aea8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.4-alpha.7.tgz","fileCount":27,"unpackedSize":207695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+ostCRA9TVsSAnZWagAAu+QQAJRchDLeJeNNIGXSa1D/\nhCJsfgpqU+C+XFRDuRGy6Dhw0XR6iitzv4NVaquO1oGNBzDfJcZdNhpWcREb\n0IpLxQ5/XOx3IOtAfuTFiboNxL5imnhI/pfqYfEnMWKBq0sge8Xp+R6UWRWb\ny7/v7B+jcKOwbpvLDy4EMkH/QOFGxsrSbq1CGnmLPhfBiI7FFUsS0ywA5Xg2\n2ER7TfUN92P+C5RICklahW3CoEV1pLsH8ohLh5yRWqzqOu3niVmoZfuGx8gH\n3Uhf68XpkvpdAlDIMoXYTXiRhzuz//wCqc0prEzmgcy364lfjUyrA3tCfo9z\nE1Gk+6xjCNojXzhsl/v2AzmRwNnjlXPXYryldIlnqT9mVksE3Zl1Nk54+hc4\n1IwNBICjT0oXURe7jW5wHED8aG/cy/3JSTva2hqEmerly/+xNRQ9FaP93HLf\n8zeYuXQnNThynR3RmspwLZVgey5NH4ewZuCiLJSavBy+etaj/ykpThoJeFc7\nVj47beS117Tnj3V2KKck5p1aF7W97agxySOsta7TlvOe+V/spto4V/p1GMg+\nmi5L1GuqI40syHopEiQJ6gtyyaZEqArtncuPltdDiEz1Snp8LbeEACTlZzey\n0R+bpHR7SIJ6aogBXNS0fHwHc0GCrqSmsbKDoqQdYAq8muSyESP8Mz/9MblX\nxcx+\r\n=3b0/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFMhn3fxDfvpvND08ZcKGBRqHDNkWmWtOMnoFVv4da7IAiBI/9SeBHXOEO/g8TbUjmTQ3rZ0FyNTOHmiIkvkvEBzHw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.4-alpha.7_1576700716915_0.9156563723635232"},"_hasShrinkwrap":false},"0.19.4":{"name":"@react-ssr/core","version":"0.19.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.10.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c5e1f07dde017b362c04a8e199cf3bd53424334b","_id":"@react-ssr/core@0.19.4","_nodeVersion":"12.14.0","_npmVersion":"lerna/3.19.0/node@v12.14.0+x64 (darwin)","dist":{"integrity":"sha512-er7FODcFsrndeplL3Uen+3ewyfy61H9One/2E73cZI4+ACQVVoqAnrfNwU73RngHdocgkQDTPMjTfDrqmktf0A==","shasum":"54e18b339f712b1af7baa2676836ba14434f0e1b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.4.tgz","fileCount":27,"unpackedSize":207680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+o4ZCRA9TVsSAnZWagAAa/QP/A1J+stBAjqnp/Wp8Hyz\nCswm53XfwcNLv995/cdZnI1VjsTRUeodzTUsXEN/E4fsQYDBXYvPPKC+zudC\nC8pUBSDSSAnLWYp7LRZslU3bUGLl7UpbmMnCu/rVizTvz5zFKXGPBfw7Mq17\nHXNG8h3xxtut9FXdrwQdw4ALJDl3f1LOByv95m1oAX6lvgDhMOmATxlUAPu9\nX1MEIgFEXsm3vS0BxuwV2D1jRhlEgFEbnWOBQyOlJdYPiZ84/bBu+Al8WGXl\nztLyZRL/hGmrg0xPfAVgF81LNiQgXzODSTC5sJsjG2RnTVayncKHvMjSoyjb\nO6hr9N2TkUO95/4txZnfmaxUr2DXs8Gc3JkWu2l5mNCz5Dt+Jmn9LBibF0o6\n2bWGYYCE0MQhzXqP2u3fhYabm4xMeC9FOj06J5Luq9t910/f6oqTyILyIWTm\njlUasNAlqkJDCmbKlmbwGekdnnPag9/+y14uozBs6+PlT8yz8X1AAv8P58F0\nu+9CYSBcMvkQzK3Fma+O4O3KyTlPZB6syzZ1xDBtrmvcQUT2eUo+ikYT8q5L\nkH3hYR/ewR0j08AQdfGOM/1SkZm9hmk8ThFKG6/pKTg8sKbsBaZYum8SKkz6\nX7h0aVX0CQ+xpAYtZPkzyNjXdR5clvahPT/7C1w6hIVJqHt2O7k48GqpokwZ\nkhJA\r\n=rYad\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwF4AjPIPlWqcmv3DdhPRS5bxEYQaGUT2Tk1rfvtCmjAIhAK0j3H+r0FR7QbC1K8zvGEwvRmZrtA9v1emkPLCXYhnx"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.4_1576701464517_0.7921892902470926"},"_hasShrinkwrap":false},"0.19.5":{"name":"@react-ssr/core","version":"0.19.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/register":"^7.7.4","@babel/runtime":"^7.7.6","@babel/runtime-corejs3":"^7.7.6","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.3","webpack-dev-server":"^3.10.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e296d90aabc86531df8cba37a02de4ead71fb585","_id":"@react-ssr/core@0.19.5","_nodeVersion":"12.14.0","_npmVersion":"lerna/3.19.0/node@v12.14.0+x64 (darwin)","dist":{"integrity":"sha512-cSufOvB8S4Yzs0DbkWKX1U9ah5e5XkdrXGmjqBP4zh/4+Wv/KarIGH2gQYq8zR3tQjgut90z1g4qfk523hwb1w==","shasum":"946f35f34b25af2f6568dd13d09829636db1daf8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.5.tgz","fileCount":27,"unpackedSize":207681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+o/DCRA9TVsSAnZWagAAoloQAIMp/sJoGJ+TeBlj3NQ0\nDRgoBK59/+5vfxrPZigV2bFJzvRi0nRAyDeRBW3jqLwvgs+7BueLg28krTrK\n4+2OjSYUj1o3bXnau22rdgqVOTOS0m+wOAvgnfZnASgTB6cpqbC78qF5viD1\nZuf0dtVpaOGQn7NClC4ZzHpbjdG6S2XyLcMVlI2Seu9VhmmlkgPJSTi1gsOO\nA05wiKuJ3Azd6K6dJJmcqiY1e6/J0cdUsShSmZ6TZ2jOHYQv8i3iAZQtskvD\n0M2Wfhp2byweTglRXVnsKAZbIy7QFyYtlAeca23mLy1DB5PA9lXMYxkJj8vk\nI5x+Rq0RXp9MNzqTEon1h2zrnGp8Rt7Ey0G2OqjlamlVRCEOZI8/JGB+hN+P\nzecTVAyTwk4DWPJD+Dq53FrfQ/uuivAKUM5bHgwczptwzcDmeQLaY+osXWBJ\n0NB6ccxJSjCz2ElQV2KzwQARzpdIvkUtIpn2BYV8Z5Wj3SD5BbYMuHd6NGcv\nFuSWv8d+rOsOZDqkHFMr3DYaFshQEPaCVuAt35YHLw2Cg4r7nA4AQv38XL92\nos3Nu/4qlbUayCZrH/RFmfpbQxxePnq4jiaHgkgrFVwAT378AFHUGU0+6bjK\nr/uzUVfBLp6/h6bAPsBWid35LJ1VwSmzpV3R9DqSIoaOt/knG5TNgv68ZeHV\nD51i\r\n=e4bw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEv8Xkloh52O6OE44lrRhp73UgTWpIbXMRkuo8SKknRAiBqurlgrNxcDDYWu4bcmj39E4RWPouScoBvavs28OM88g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.5_1576701891184_0.27879435950176656"},"_hasShrinkwrap":false},"0.19.6":{"name":"@react-ssr/core","version":"0.19.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.7","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/register":"^7.7.7","@babel/runtime":"^7.7.7","@babel/runtime-corejs3":"^7.7.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.1","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.0","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.8.2","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.1","unionfs":"^4.2.0","urlsafe-base64":"^1.0.0","webpack":"^4.41.4","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-node-resolve":"^6.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9c375b4e1c631620368426dce0a16e8626b3a272","_id":"@react-ssr/core@0.19.6","_nodeVersion":"12.14.0","_npmVersion":"lerna/3.19.0/node@v12.14.0+x64 (darwin)","dist":{"integrity":"sha512-lhpagxyBv8V+4TPmjazVSOhomY6t2Z4VhhY5XqRAHnSJCZNP5lc8J7xZIMc0xcDojkoeIVIkWu5GxEYuevQKPw==","shasum":"4b1bc0bbdcd8453391a7d63927ebdb9ff451c4c4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.6.tgz","fileCount":27,"unpackedSize":212569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/NI2CRA9TVsSAnZWagAAM8IP/21oErOe2JpZ3gyyblT2\npa3TWFfmG3KCb7WIgRTWka0IZISA3PWkrWu+J8GoH48EIc9yGpMhBzXl7Qdq\nWcRKKFfVrWvWTKZbcOud/ujphNdmDXsB/96gI73jrxsNymLoWi26Dus3FgJx\nH4mSjbcxYJdyoiC/IPnJfaD5uyLRMGUMbU6hDSoW2o8Gsu3uL10gPGWEhMfP\nl7calTyB0UESNhFQuvDIUsZJtf9vAej7hJohwCHb+bfIHf8o3uI0n7Wx4jLx\nlIlAwjnI0HTocD6oG8p6/NhGO/1Nhqa5RHkmnCjj4toD27KHY9qJECQzHWZt\ngHX/5mQ6HqVGIfbiixva7q781TnMCA9scpusE0Xiq6HFD8FjBnbAaR/RzmxW\nd/1Mk7klm+kvpX3urqKaMxwWoJ1xHQXmh+6A4/Qm5kfMUK8EdiYroIbvWL0b\nemYMzrXeGDzMi0D0zu01cZD5UmB+yb1lTDGa9CScg0eZQ2mkYkFGH77luSiX\nbSCnWd5oF1hQbbWK1f0HYb5671DSuCcpSwQpW0i2oJdxA698fhl0+QgjDPbx\nKki8rHqQf3TUmJbhicYiAYqHsfF8BNksuvS5TFQ9Fj7BNyrZYU9ELh75t6gu\njAchHDTRAO/uFZqBOcAIt5/HkG5hiuMCiBvUrPG2qsK//yds51/UxD+h5Y/A\nE3ls\r\n=mx6J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNg+ugO3F+joSaE7axUPVSS9HuKlq/i6zvK7LzamZVCAiEAiSh+PWsCizAaPUgbFwmPt7g32GuRoTIuxKjkALUGcGI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.6_1576849973661_0.33062021571106404"},"_hasShrinkwrap":false},"0.19.8-alpha.9":{"name":"@react-ssr/core","version":"0.19.8-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.7","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/register":"^7.7.7","@babel/runtime":"^7.7.7","@babel/runtime-corejs3":"^7.7.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.2","unionfs":"^4.2.1","urlsafe-base64":"^1.0.0","webpack":"^4.41.5","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@rollup/plugin-node-resolve":"^7.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5495f391a8550361082a8dd97c43a488f587ca0c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.8-alpha.9","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.19.0/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-sypAA36u8fRL+Wt+svENBQP48UN1oYfS32BCmYRKFmuIaIXFOj5waKgal2BqJR4JqsG7uuR+OnOgRw98acPzsQ==","shasum":"79c5ce2bd09b3cfc52cbdfed2d76ef277673e0ef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.8-alpha.9.tgz","fileCount":27,"unpackedSize":214700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeGIqkCRA9TVsSAnZWagAAjAgP/i1IUq8W3649bn/wDTgU\njNLNwt8s+ogJSObYzxZeUWna0pBww+OehETG3zWT3FzVhPzy1EmLREc8dOqm\n+AtwvpZMvKhCzrAjBACZohBOXA55wnmgIFVsG5llwg8WqUEJmmCqNhDJ6FzF\nrIjx2VplhksN+b7T1+n9ujB4I4IX7gXzFKGZJj5SEq8SWj4FeZnEq8QaxO8S\nhnW4WLAoL3tTWj+YZd+FA08E99DuXJZjVpQ0SzLG0EfRy9P8b208BXzUSf5a\neyQAkgo1UN0ls3Rf+sfptHXIFmIxUzgvCPkJ+EE5nvyfxiDxaXdspIbMvzKH\nkm2A1yrTPJVCIz5Gwn5qjYA+3F/9qdYar+yVFpom1m4mihDcUK5phYwjZlrn\ntDe/YpfN/hdNOHexUjJW05gLa5rDgawZeayMBRhSRr+wcY31um7wd4tzqwAz\niGdzTHMK/v86e1xLYR3mhEJLZ3dRo0JhTG2jw2qBrH678PzwIic6SGGu/FK5\nr/zPGUK+VOGxhmQvTg414KkVvICQ07YjdmiNsuNAJoO5etizut1ZkueYO7Mg\nBGgX6kady3PLpTgZuQg7EO1hjt1vjMD6zkab47agc7si9eXMOm/JOCUlTbZE\ngnCbIYp5akYJgKVv8uNG0TlIVId0P2iutmhbdVOg8cChuAjvMHVgMKooYlEP\ndfWX\r\n=hW2F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEaqhpuMZYIAl3zzLU3HBkSRAqrKbng5WCDBP1E8Lgj1AiAZZUL6JyS6Mc/aM5X3/OAW/t9NeyKzf7XqZQbthNsjnw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.8-alpha.9_1578666659965_0.7910828464848756"},"_hasShrinkwrap":false},"0.19.8":{"name":"@react-ssr/core","version":"0.19.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.7","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/register":"^7.7.7","@babel/runtime":"^7.7.7","@babel/runtime-corejs3":"^7.7.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.1","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.0","slash":"^3.0.0","terser-webpack-plugin":"^2.3.2","unionfs":"^4.2.1","urlsafe-base64":"^1.0.0","webpack":"^4.41.5","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@rollup/plugin-node-resolve":"^7.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7d4dee56b2662a8d2498acb533fa275da77e6a33","_id":"@react-ssr/core@0.19.8","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.19.0/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-s6P0aj9oVOAI75X3RapJnlCkjOO6FZfOPYGBecqkFIRP62bzZWb7skaBdyZETiJSaILHw9AZm67mUEyshdc8kw==","shasum":"039e2724b424b33042f0fd444808fb4a1e5cb2f9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.8.tgz","fileCount":27,"unpackedSize":214684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeGIsyCRA9TVsSAnZWagAAqA8P+wTn0OgNMfMcAS6CkuHd\nZVEolJW/gejKNC+aq7WQCVEHQn9aUp0XexT21FAL5r1uDcv6vUkPLuNPDZQ8\nb39zoiC1mMClCNhy1/KBRRR7n7NEUApvjEdLexsKhyh4r62GRb9/qdK4u3zB\nynJ1fst/I7QIOoeaYXsVgRLtzzwKLhp+n3E7WV+Pr8hOk/FHE1cl7CQUNJO0\nHvafX0qeQwVMEmLC+BUEJzEZqX7sKRCfur/8KAAT8RdB2UqB+wU5RIVGTB5d\nw6NrJAFzxSdjmm/nXkEvRD3ifanRlngOZzO2+dp9uDFt4M2z0cjBolMb2f7v\nO5rDnh6Vp0oqURW4oGCbfm045ntj2VRJ/EKWJ2otq8FeLNYBmzUg4MROsldz\nQtxRC/qDGfQ6QUT8IMZpDTYtVtsUAH8SPT8B1w9WjsBrV0RtCicIa7qlg8bP\nDlXwVmN+hQmF0Nz/XT1dL66y3B+nQJ82sPa58cB7IdNOVI9FkgY/0WEqUqlL\nrZhKoETPmxSyOgF8Uo0yCLBcvsZ4ohbDKDlDTKXdrdyIcB3WgQwQzgor4cyA\nh1Hg25/Lt+3nYR01rR7ezKWBA4qKpKAZAI6JLv3fOQyK9cgxFSHBMFlltMq2\noF4TSBAW/YwIWVtIwW2v42xknMXPlRQ56jBPfiusdkybepQiIqWlgJUfzOT3\nj+je\r\n=MMYz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWKdNuy4lgOBMmxMiNfvEgEoWo8VWK5Hp8CTYAfWYP1wIhAPhr7aCX8ydgyL1Wkr+4//rfUBiolbCAWB4i7Yz1kgVz"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.8_1578666801753_0.7073917739803168"},"_hasShrinkwrap":false},"0.19.9":{"name":"@react-ssr/core","version":"0.19.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.3","@babel/runtime":"^7.8.3","@babel/runtime-corejs3":"^7.8.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.2","unionfs":"^4.2.1","urlsafe-base64":"^1.0.0","webpack":"^4.41.5","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@rollup/plugin-node-resolve":"^7.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3b318a0dbec60d05139259761b95e4689fb39f74","_id":"@react-ssr/core@0.19.9","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.19.0/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-pgG1VDQWiZpqC3YzyuyXQCot2v79VwWpCixu8qqFE2W8rEQWUtLuFMTMoRjTp7+WXKxtTNVvIW81DGw0wwskiw==","shasum":"cf78bdb70e6ccba3a341cf8c68fb3c85669a50d8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.9.tgz","fileCount":27,"unpackedSize":153057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHqPXCRA9TVsSAnZWagAAna8P/1sJT8av5e1sNVq49u8J\nEnoqbhruoymp1R6RFgrZ3h3CSC7OWT/OPfjUmbM9A1lF78sNBR7ydHwQ/1lg\npx+X5NSScEt4v4Qx1nwlrK3IvomI9JQI7If6hI6xyA3ixDKinpUFLW6NUUKT\n5jgfN0VzeHZ6aXQhvS4QXMTSi7lF8lZfO7sCin30HSMoc4OG/h3tvay1v3W0\ndYT0MfncIHcsEkxxUjTLYGK0Cibpfwf58hy+mvcWpxVbDjXEpTlGoyw6HNaW\nMze1bTPPCh3cRvrXq0E0B4k9PmLgi7T950Rnah2NEpPARARI/YwM7V4dmCpZ\nZclED+tI8+FufgFhejdS+nAKWiY6WSVH32cEllk38wQv/DZpuuMr0saAO8kM\nOJ1ewxD3TbYmbtj6YA72uLYAUUt3YAEuF0Rck4UDOf7ldozXZHt5nH/mOQTj\nNXMhYvnOtEn8BJ9jsF6nKsYl64+BdE8da8NUMgUkGlbp0ebVwh4gpAOJP+2h\npmp0NOTDO8ZWEB6xIHAobfRhcIK7O4pyRPAl8GlHmi3x8ac81xIsxHscDEre\ncmDRUVBmGMVCNp2NTEEDBEaI9/EaUUKTVqOCMrEanILncrfAmfW/iHVR+4BM\n3t1ZVd/AxkL+KSt0fv+/RujOLuK8RA3ydNNV2ke2B2a6UMtjeIZGJagFyATA\nZ5oF\r\n=ppHu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5YTOEGYk7Hkd0rEiFNGWsgY9FtKb4lCZpybG0yEIguAiEA6nBVDQK4jNXj4Q7EwCbMLq44ardq/V9N673BeHhzeIE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.9_1579066326828_0.2484646790567917"},"_hasShrinkwrap":false},"0.19.10-alpha.2":{"name":"@react-ssr/core","version":"0.19.10-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.3","@babel/runtime":"^7.8.3","@babel/runtime-corejs3":"^7.8.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.2","unionfs":"^4.2.1","urlsafe-base64":"^1.0.0","webpack":"^4.41.5","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@rollup/plugin-node-resolve":"^7.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a837709ae8e219fb8d7bc8d18e6ec540cff30ef7","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.10-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-tT3p7FoN9P5eUx+9/mBH2M4qLjcqCMHkjh0bAWjo2vhy/HXjrOchEoi5fvG9IAzx85hg6OE+4GDgLvZ5mo2TVw==","shasum":"fd3e5e9e135120cd5f11c5266a005c3b499cd89a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.10-alpha.2.tgz","fileCount":25,"unpackedSize":149344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXQf4CRA9TVsSAnZWagAAgOkP/jWE8Q5mj4uwkifkRCz2\nfYTAOu7FhEXJaIptq61b+jXwBEiRTBbiskprB/3SVCDvGyc5oEATaRjYlBQJ\nAu/TEe7g464CHMdVnCEmfG6nPcXxu2nKgH27ch2Wqo3zywpErZIj/oMVZxFb\nWYramBvLlQ2CgE/U948hoqzGeRXgwRHC3bfBRq3o5eeZaegdGjOuYTOaXxuS\n2RgI9c1V90PxuiFSUWBgYgPbUYCwduYyAFrRsfoVPQw+JUf19Z2zpUtwWV15\njSVvU0lXVEvxjXFJ8kY8HWiM4bX1rGPGEvDXsx65H256NJlkNyswk84gG2v1\n8BigaJCh9rEbID2l4O8Yb2EGQrnQv3qzIqx7V13pDWWxQGl5pZ8ueh5M778c\n09XH1ZC8eZd9yi8FjdE0b1LrkldSwS1udULN2t3Y2IDr2fn70oHSDdnK0jJ1\nG+UlQggvBmw/sO1od62EmMG3Ijh3UZNDmW7+uAkIFDBS/nIFU+nXDyzQMH8r\nq8mHULrOX9mOCQBjSfNou7Z5EZ6wF5xCz+sxZr0WktTQggNh8DsBIzxpZuD2\n37RQy5CTdwyH0aI1XfyMRhyQWbT6F7PXNrPC6A90uXDYvf3V1TwidgOF8CtO\ncIZyWQVZdebAhZrmH4Ig6XgrQOAeJuKPFmbPO3TyXXutUIeXvSGoeCRd+Gkx\nLwj7\r\n=Ep/B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0jApHif8pOSDB8tZKxPRWcLR+gTR6AKkrRDDS7YStowIgF+qATYJZu/dLx/SEFkGEh24TgSDPihoK48xvMYWenvw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.10-alpha.2_1583155191908_0.6485527408326519"},"_hasShrinkwrap":false},"0.19.10":{"name":"@react-ssr/core","version":"0.19.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.3","@babel/runtime":"^7.8.3","@babel/runtime-corejs3":"^7.8.3","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.2","unionfs":"^4.2.1","urlsafe-base64":"^1.0.0","webpack":"^4.41.5","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@rollup/plugin-node-resolve":"^7.0.0","@types/cheerio":"^0.22.15","@types/express":"^4.17.2","@types/fs-extra":"^8.0.1","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.18","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.16","@types/react-dom":"^16.9.4","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.0","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","cross-env":"^6.0.3","express":"^4.17.1","react":"^16.12.0","react-dom":"^16.12.0","rimraf":"^3.0.0","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0f8a75eb8aca6b55752b657c96c4c7ea1d7cf838","_id":"@react-ssr/core@0.19.10","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-45UI4hlTRvQniQH5BGVZrJKxIRKPKlhNDLPOazJjoMbOde6y8UhWkVS7nG+4jKEFF0Zosq24b+j5dpj7XZb51w==","shasum":"3a2be63386c6b8cd899727d01701dce683203701","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.10.tgz","fileCount":25,"unpackedSize":149328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXQjfCRA9TVsSAnZWagAAtaAP/Rjqiyh5X8s54TB1ADDE\nO20kU572Jtq8Pe3B1Xu2+dUeLL6fJAMPp8WQWollvtrKDma2GaCD8nSihrWd\ni8q+34Xb216jC/vToOgP2hi/rNWJ+vNJRTO6UUGTHCsPQQGJtnrM5R1Enetr\nLEAeWOxBMH/h8OvuCJ9nS9Rtb5H6ae+ug6K3jIIBYjqSL7z5etigw0c5PMOR\nkUH335gympW5UodJUMIdlW37hE0iHVJg9BcwxfwlDrisvw/73VPqsepqRXEx\nVHlXA6LhebQgi1cUaG/RRoZLdu5SD8zJKvxDf2kyydvEl5MKPAWK+pGEr+nb\n6t9wjv9Tt2yYbstC2pFSjCAFaS4eaO1a0Qwava+DdCHBecmdoQ/HDjANiTJG\ncrVWUfMKiHxA/O6rWGTq8fddRLecysFC6s5y1M+hF9ppYltVEMy03m5lw1YO\n4PXL/d2ZWOjjYS0ngyfk0m6SEq6gARTogL32hB4zLrDb/gYOuyAsr8Crfh6E\nM/EoeuxcKVsdZ0fmS4rkSX2tFZ3UE00nHhne18aMO9qWRQ73eYPWEsfrbNz/\n2g+FhpCPV3nLXb5JdWOwF9XFM3osVUkuwgc50DO2+jHhZHz8QwnW7NiWYbp3\nlGUNmIdmGPAXU+CJmQjzb754TET2NHLemdAVzT6+ByI80/25F+E7/8PNugmw\nbdoe\r\n=5sXq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmqCnuhvhgDj3RxtuApUrnnHwJet1m9LrRp+dP1eM9jwIgDZNqKlJaHDDgF20c2eCuklbncN0nvZfRiBeyTrD3Qvg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.10_1583155423291_0.417190527847479"},"_hasShrinkwrap":false},"0.19.11-alpha.13":{"name":"@react-ssr/core","version":"0.19.11-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a5d731824faac353903769e55c04bdc44003cf7c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/nestjs-express/babel\"\n  ]\n}\n```\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.11-alpha.13","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-ZJTh514J3+3ghIhpsspm1l5Or1x5ziS199rZ4QlZntynb7w1ZcumGAkG7IOlEuuSXLfTpn0FD2Bg9qRK5r7kkQ==","shasum":"66f640adea768cedc921d02ff61070d3a08d089d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.11-alpha.13.tgz","fileCount":25,"unpackedSize":149344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXRGxCRA9TVsSAnZWagAAimYQAJz4dDV++iwJWDT3u3ut\nti0yrsvE8u3IgEC8A1dGUeIlaRkH+6MRJk4XamFcKhe3XbquuFb/MhyfwRYF\nwMzQ7nFiulnNTIGJkO1432RyTivXoB7bCmMJhf5H75jl8ZCmx7M4ih/UeN+p\nfiUOq2WGdXd5zjHX3k7n60oHfuM+Xuz9QuSCiT1O+27DCiz6JykFoNQ7ZGKz\nkR4iuvADCutZ2lvKiK6jmfa7N2y9rXAqnqeQAt+c3oQVrizzmi4vI4uYbaaA\nZwKK6snCJIumhjEo8Td7KEW09FiqTvzrHkFvOCmBMVlntD5HGA0/6G/QwTmz\n2/pyY+8ATJPm1oug/CT0FhQqBNOIrT7rAPcs63ClP/4Mr94FtNRhtngusV/K\nSe0s2ctCGFHdJlM5UexLWBVccdw3COOTH8RxwtpEYEmv3Gm/ICtu75DI+ZQM\njR37f1MZZjXIdH7roUrZfoE3UJk14ZqA+LcltGDmpOVEELpeIXMXkWPAPj3G\nWnC+idrDbf5UaXaA8fNptqpisvp+fQSfpuXFvh6kqj3DbUdPZGB21OiGFQKx\nl5zthWPyE76rx8RvPNDbVFC2HGyu8tTfeomkFGu1Y0IN4N4qAopVQgUon6u2\n/neQnS7wgcU58K/SMmb/vzvVNDxraDRbwIyZ9J53VN7ftunguOrMkbjvi9nT\nUtgS\r\n=Lvwb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwkbMtb3Q6MJuXyEk0bAlnmOxpUKhlQ2M6rMKeQEFsCAiB81tdhd257MBTqI/vprcDXZqJXC2vgyeUs17RItBkjwQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.11-alpha.13_1583157680689_0.6381205111393002"},"_hasShrinkwrap":false},"0.19.11":{"name":"@react-ssr/core","version":"0.19.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c","prepublishOnly":"cross-env NODE_ENV=production npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5db7a89f256a6af6ec5e1f46bf1badd2d7ca754c","_id":"@react-ssr/core@0.19.11","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-xr6GyRdgF7gDhc9+RekNqCT+tP3jvlSAtz6Trb5ZokUIotDgt1pD9L9Hdd39d9CVC//s2QYEOs5m2ibxqeYE/Q==","shasum":"54dc2c42ef2130459821444ce69d8d22b1c9eace","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.11.tgz","fileCount":25,"unpackedSize":149327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXRJMCRA9TVsSAnZWagAAuwEP/2hF/eEyGeqe58sofwoR\nsS18K3xQE3NtPOQJK7JR98PYtB2O9C7rXQOc+efdQGF9aPOxrYwmtiawWchw\nll/pnbxok0sx+jnDuPluEe3Bb1vWbAiHjv0O8tk4l6iiRDvcMGz8Iua/AHyZ\nmq0pZEtxyqKamRexq8zOTQRwl5po9EvyniDKpfEdknPjMx3otIvG5e7jsOma\nc0+x3x5iWc2hBDCnFLmDYOdBfCTakeqc6D4YboLAqDFHn8Fwg6JCQGV3BY6L\neT0j3wMhf/W+EHIdGJGVkJLFJVuCTsb5voH3CARdnAYAzMXcCv47+80RZtZz\nGgYAuhGRuztOA5SRNVT/DXTnSVgkVW4FhQ+BXANBp5tBZmbosRQPxnsflv0n\n/athnhUId+E9/WNOAbYfegY0ghVqznyk5QRb5jM6mRj0S1ruVcqa1cKbaBn4\nLSZuAMDE5qcf/Lb4cp+ZrAbwAv6mfbCFGsYaRqaduqjYyXKKgBl14aJN3VEj\nFocIa+dd4JnYqkJMShwrYQ+Crol3U+r27TKKpA4bniVX7lOOZvXMrlCLZ8fb\nf6VmiSdFW3sguxilzxnIKkD+OSMYpez2Cfz9bxlAyxM+nj8TQ5BLTjvC/9QR\nMXGOkH+YvxAdbyYGAhr/KaoffsZH98gdQ0ns8E1xUDwEPuBIn6TwtzhGFOiJ\npxbG\r\n=THso\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5DGu7QEiUhXGYGyu/ix4ob4aBqnF2sp4ATwsbuVRTcwIhANo1M7V8sMKBzKYGmaRonSDrBLUC3G/Z0gKu/qO74/zc"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.11_1583157836344_0.5938398522893096"},"_hasShrinkwrap":false},"0.19.12-alpha.1":{"name":"@react-ssr/core","version":"0.19.12-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0506dd74406e759cf332cdf21697e07beb1b3825","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\r\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/nestjs-express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.12-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-Inw+R9EfSIN/HQxv58hMHQlK7wCC/IT1ObKK/w3zrwAL1k6XFViYoGB/HAaW7JyZzi3EB96YalkyiHw9nwsHmQ==","shasum":"1809eb16c0e832a96287fa418c8b1202e8426ac2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.12-alpha.1.tgz","fileCount":40,"unpackedSize":533582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXV9kCRA9TVsSAnZWagAAgRgP+QGN2L1Jjca+1yg0pukN\n3EJSgMUwZ3Qslvf3ZzSmQgwxksA4qzIMZjFWfnDVOyhZKjBm2qL+/HQl0gww\n+RfVNFG1wmccveRhjy0xhqG+iuuQ4eLCgN4+ulvYYqUQfTmHYKyOKwyy2cQa\n4cd5dIJT5zmo343e9QV70Tc7lZ/HsndKFiZsk28hNkukP+9mxNQElVhr9vnF\nmd4zFQoRMTIpNiLXjRvubl4aFiJ/WXNP/Em4uXHsaYF3l6myb7ZrLnI4U3GS\n7Q3UCj0HBzNupqksJkF7Q3bn2w+8UAjtsPA+jAxMU2ASXbYjNkx+Qh4mbO/a\nQd9gC1jzoQePHlKvnuB8EF6oERwXjj9IPzxRJTBAQsHyLvDM69H0dDbHC9vm\n2eXCkkd1vUxkBXSsOhDgdGgdW2TuCO2yiAl1HTWIsbfA07mj7Q/Z+qXGaQ9Y\nCdORcvxA+C/FV7Ky5XZbeLFAmMAFUNwdSj21e0KwZbMTJ00+WwHu4OOElWIz\nFDgbJRe1fFD53OjulFvBaOAO3o9bjU0gXyZCY0PXHarCWr/t1gguFnECZqX0\nYOl4b5KXRzfbVRAo1wWEA0Dkhr88bnHvNa6NDiU56BAFXOsCY19F8iIA+KeH\nOs2ex022KELqF7bMolQmS1ieVEzNgeLu5YkXLsH/tdUfHp4whDunNCtzaQuL\ny+Sy\r\n=kqJx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/3xd8iwjgNvBDzcyf63R9lPm+KJmPX19W6dMMJ+E0HAiEAurYpddABnwftX8N3orZ9Oi7TxpR6VlIPwlLMXB4hlSQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.12-alpha.1_1583177571981_0.7637776035159785"},"_hasShrinkwrap":false},"0.19.12-alpha.3":{"name":"@react-ssr/core","version":"0.19.12-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ea265b90697d35a2ae28cf67afd7cd542a132f92","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\r\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/nestjs-express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.12-alpha.3","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-b9Q39cvdq7c76P75FcLdCPo9FR/Kveoj6KM/oPBwRCv9iydSxe/DGjrjAUCKNr0ZvYKAH8WYEIk1HfQG6S33xQ==","shasum":"9487418d0668d38d40694e372ef9543310b83f1a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.12-alpha.3.tgz","fileCount":40,"unpackedSize":533588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXWIUCRA9TVsSAnZWagAAM9UP/2CTt2iIrKjU7ckcOyx8\n7OuZrzvZfS9MhzDTAL7Xn/8sC+R20bGfLMuShRKEGIhFP/dRvuA3xKiLTRod\nyTC1KflCEpvdI1+bwdzcEkHXbxo3mJKhSTD+HPFmEOo7/IHzgNsPb9qTtfnG\nY3JDhxuxAb30nZ7ZxBY4vIhFNRRJCdAjTZeNIxAPalHdvzg4Hg1H6Yv+hMmO\nFYLyDNoAH0WC4ksQT9YhZrlwRaFHI+kY0Bf4qIV7NIoL5g0JbbGMXVMNqjfw\nP+BnwoJdSd+S1XStky2FF/lQTozb9CZOwgVPNucnZq1yEOK2Bqh152/MSmUZ\nFUHSEglWxpBxUeUQBmu12fRNJAJ+wxxaLou4eJ3+WMopYGkysnffAWusFsOu\nS8NuVvfjnRqXptDn3ILvIHLM7vFHOqs66zFKrITKbY3Rvo+F6GxmEp8jMDCC\nfDJnLl2MtVqL4FwUtspMIf+i81SFw/AUR1r57q5Xn8iliew5WnbHWDUPdRja\nVRCT6HInvwmtwsbx6FG3NeNoEo54HnshTVACFccJY09+gorttx5alHDnaM8n\nPPlIqJGj1dZCyqgGvn3BfXiXHs+pBPtmjwsSQfURYEvAB/GEA9edHK5U0V05\nOEf7Ur3m6tQBJV6KJNwGt8Hh+8gD8iAv894eerBg9iJvz4VdAdcIYW/S7bU3\n2HXO\r\n=GPmy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+bCZy9PExeMhXoyX8xNzXXL6SvLbMIMmwBFavbFlhIAiAxpoQ5YBdrRrfRnLtY629AX5Mb3l0Jr5Pv0Xm2I1pqoA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.12-alpha.3_1583178260448_0.47286915699210996"},"_hasShrinkwrap":false},"0.19.12":{"name":"@react-ssr/core","version":"0.19.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"268f1e8b1e3ab9b089058b926900fc3a63b891e0","_id":"@react-ssr/core@0.19.12","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-cSm/XMIB1Knb5bI6SAJ+l78FIC1YcmVvz46/T3OBIyJj0pnXV0ExbEdKChpr4pIVus/I2/8sO6jnUXHuoY1yyA==","shasum":"cbe869c20bc7a98105df4278ef60c3830c789b98","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.12.tgz","fileCount":40,"unpackedSize":533572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXWLsCRA9TVsSAnZWagAAPL4P/ArnOGP1SOd5fqNWr99i\n42sadAGxZE7FGwngLss5QT5m5vLbpE9gBLuenMu7vHSnkf/ufpqP1wtk3lSe\nGqXTVviEnAK8xB1mZlsUtG7XB1K2WiVi/dkj7Q/oQ6H7+fO6iTVNPjULaj5p\nropXmUOgMFO3W5bj4OzFkVluZZNsJDzxerlInPZ434YtJxj6kloMXhOdwgYZ\ndNwiTECHyL1x/XJhGjGAu3sJ4vnO/1AcbwYZKBKtLMbpls8mBlFUPkvLQoXx\nvbmvfxcyRK+KdZeHmXpXJovUZbThOYzlHEHI2xNFv36IWV6OTgYNuTS3bpkM\n3JsDJ5Jl3j2YWaKurNFmy7hCusLZ+bz6OitCk4qyo41NPre62FVu63NmbL9r\nEWLgFUWvLapi9X5ez1M/H24ePwepy/cGByn62tYJ6b3Zto+Aps9nhRtK57Bl\nPSaMUoaZaGtrEppE9YYN38H8RIUTypbGAna+FC7TD3FSoK33Ta2CrSehcb0h\n8XJ9yNCcvd3jArjZG7Ylo+aUlIa72UzwQGnh4NOm8zc95kGKkcm6qCq3o24O\nYL8wUrfNwR471Hh0uQ2CXZI1KLjoz7r6IAxaRncYh7iz1BAM5K1x4i0IV6Zi\nTy5aH1Sm0IIe7qvt9//5diuMzzs9S5IWIPpCYISpAhd4IcofXrcvi4ukpbB5\nBnvJ\r\n=f/NB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp/7mcZ11ibpWc7TXtJBdNUiik0UK6HWDsxNuCyJFFSQIhAJSq1e+Djo2j+8FE3UPpqYLFcdPO9kV2V+DpMnOSlbQk"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.12_1583178475862_0.6021071808485203"},"_hasShrinkwrap":false},"0.19.13-alpha.0":{"name":"@react-ssr/core","version":"0.19.13-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8344bf11dbb3343a5698b59c89bd69db4d870e73","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\r\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/nestjs-express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.13-alpha.0","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-V/tOHq8iTvJKdYzTepCoF2AWrEa20AbOIFYp7+OuwrXWEHD6Vrx0lVoNd5i0HXTPrPSzy4opFgAIXk+KXiaSbg==","shasum":"e8b7070607ff96ab142511fd6a71d3e1b02da9c9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.13-alpha.0.tgz","fileCount":40,"unpackedSize":533583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXWWkCRA9TVsSAnZWagAA0tAP/2qWwLFZG8IZH8B06Qtk\nPyy/1JIdQxquZNLFhbGEEvZ981wXl6aYKYzDMK5vA0CBZGfVdKyz7d/+wfbz\nU0AXqZO7sYuMZNJbGqGFb3J45u0Vek9Sgu5SZX6s0TqEtu7dhWpK4BD/KGTO\nmAuCXrqznRjhrqJVv+6TwiiP+SUW6Vhvjk2f/c+2bgOqHs6+ysAWlR7BtJcd\n/iSTVcIULDzQvqp/OQjhO3g+ndCM1TitfztYZfCs+7Cr/h5TyXyFP/gVo9EL\nM81qeKJsMNibWeeKuQdaNpHYYWAV1ZztSkOg7vaWzXFPnUfOQ8xanKRe6jxS\nxK8P+7ldOL18omsr/Di0E90PvhOQaKgx8hsiOqZmDp7ZZeeUTAGJT1NzlAfM\nStbbf8DyY8OSYP0TkNVekcI45z6VoaGxN7kHSbJFYDCLyEa+HFf+a8XDlZLP\nUvpCV/kNVTI2Q4iZMuf4wSTfqqze1w9pcRJzNNoSLVbP+uMas1QpgViEPQg9\n4KZajiCJl4D3zmvNCHqbHjupjBPF2t/JuabI6HXuIKumxTXJrxy/89O2kp1m\nOYg+H4JnI7trznHcU4iu4Qx9Jx1y69jHwjl2qufH1nlB436bmuaVYvl+yC97\nN6f+2sNldwFC1wMqCp0OjUx9vL4+ATLkC1fwJ6MaPsHvh6+EMxfF0z/L3Avn\n7c+O\r\n=AOJg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD75PfwJgz3lMduuCbvx6xrL5QCkJZbvshJg13GeqGt+wIgFbvRV3q7iqDLCyBWWHZP2KccGkxJyD5p3yT9B4L4g8A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.13-alpha.0_1583179172282_0.5414959095168981"},"_hasShrinkwrap":false},"0.19.13-alpha.1":{"name":"@react-ssr/core","version":"0.19.13-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"14d0b78a06149584af6ea68b86671f82d32e270f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\r\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/nestjs-express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.19.13-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-yiWnlZn1D6FE+kRRN20tB85M4F9grP5J8tjiW9ROrPakiLhHelN0QLvjwiERGByBPJgLk6rFQuDJV4wXPIIhQA==","shasum":"bc83155a933d8c4a7ea9b11deef15036a833b20b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.13-alpha.1.tgz","fileCount":40,"unpackedSize":533442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXWZrCRA9TVsSAnZWagAATr0P/i4PPkojB7c3AeI+roQH\nNi17+JSMEzsgHoXVyZAx69M4riFAAu0nJlF6WAYQkVtt9evMaEwDlqlEoBc4\nwI+oy4QlMQ2BFXIt1El+L0vZ7MaEn3GAd6qzO+4Una6CoFkPWjIMhaQRnR60\njHfFqleVT8oe6oasUH/0/I09+fU+1nRCUV/kkGxkgKNFntC5mn7onA2z1X9H\nGNn+10qUq+TRaUBuQQCxUP0V8USMVXwK9aINUM6e/iLyDfnX/BtVNHCNBXtD\nbCuzwuu0Daa7dNc9oNCo32iUimYTy1Q5cmBa3lsu4EFIi5l5PKMFmTwTTeQg\noeC6/fcrH3AF42ms/Dii7xBZepE+6u0nk2Wz8nPQsId2DE69igKN6wW9XIHw\nUXpn4X6CRiLEcjbXy+JCnwWALHClHbs7ElnZ1TBCD+gM5PT7VnmCcQfSrYNh\nqiEvTcWFv6AvV4IPFj03hikWI7pIGPHhtqCmbNvH7vzQYjWmT+drKOaMCWPF\nP8Kr7fLwWRPtGM1Kx7QCmmRwFlHtvSo52hZGnoD1pA0+RkQUI7bdRw3av2C2\n7CwQWiN/pHqny94Uc0vbZuzrq0P+nV55koedo3ZC9gDBc0EnwqeShtDqvE6L\nI/liSumOd3+TsscQZZBbUJ3A9k/JtXtYIblZchlJI+4Jxz9he/yNxxpyVg2d\nLNvB\r\n=sQVH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2s3XQIsirFrcZsO6RtC0lH5qR88Q3C6xf6S8S/t49FAiEAlH1WIb7ivx3cA3fpc3fFubyHkE+JXRsQZWSO7u1H1yc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.13-alpha.1_1583179370825_0.46826692954426274"},"_hasShrinkwrap":false},"0.19.13":{"name":"@react-ssr/core","version":"0.19.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d398a76dfc14860b1170b737aa061d84e0a73d9a","_id":"@react-ssr/core@0.19.13","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-aiyTmwj2g36K3QpUz/miKuoFYzbbX7OvfFGYTaIVIc9s4AeVqrp2q7klePad+07N9OoXCO2uODBh3rtZv+TFAw==","shasum":"4c51b08c79d1f72d349205ea679a2e1f292c203d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.19.13.tgz","fileCount":40,"unpackedSize":533426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXWcHCRA9TVsSAnZWagAAIYAP+wcFJPhUIHQ/mkwDy1NM\nksycpOEpduax4q2wN84z9SorB355YNf4hkRkoltsv32h9/xwPh2UcSTlnGG7\nrvdiwcOqt2PBqCtYZSMDuNDNXHxff2wEIbuM5p/TVgsFE/rbJmBCMK6NKyK3\n7rkCqpP7IKSgAeAqWvackzGk5legkfyZADlz/4epoNvXsY5FPCdKCiaqqXEZ\nemO415xQxnxI3C12phL15stdhZkWGSjsl9eCn9rwwG37eslOnNpEAvJiTUrv\nLH5u53TO2EOEx0ztL6tSSeuXiSu1/0g0vkrHC0YyhOrK648dQSXtdR0ytj9F\n3Nq70BHsWvmXfwZTZfYAHMzuDPJg/5G3Mx8yUOhcvIopDJVCEw5b2lm3ZTzV\nkLMJ6fs4lBoCP4ByxRkhlq54BK/Sp7ys2WLZ4ziVeZpY2dWseSLZVjkZOtBe\nPGc7kF6BbNkUq9SMLZzr9tgi24p1mbhGPWLwOXC3bANi5Kn7sb8CC38Qtygn\nFMrIXGoHovWU7KQEUa6TKQo37fP4Yba/NW+uoD6wHcWqDQ0RLp2toCIA24Qf\nZhCdq8khwoxevvv+WskaJepb0JuuBEW1T1Io5Sx/Ku2NbJ+BJPBkiqTXuYdf\neHFkPA8f6eJ5wbkNCuXaKNyOPjP7McHzcc67CV++0yc1v1qYCIQ4X1kzunTz\n5HA7\r\n=cD0w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyKEEhKFMIwXpUwJe3VjLWUNc+44Qsyru82ZAc+sSmFgIhAKGkrZAl8xYfE2ZQb1d54EdINrgmRb7XxIvYD0y3QEjP"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.19.13_1583179527106_0.06951175824705813"},"_hasShrinkwrap":false},"0.20.0":{"name":"@react-ssr/core","version":"0.20.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.4","@babel/runtime-corejs3":"^7.8.4","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c10b3653232bf64179f329b2f9db622e0f8a020e","_id":"@react-ssr/core@0.20.0","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-7A/JtXPa05x6+OpYEWt8aOwpkBeTYdIbacgWJWbX2h6mpKm3vEBREqlE0iV1PxhRJT8Kp1ycV3jQ3ZJTQ0eurQ==","shasum":"151b99af53f8b220f3f5ccb27fef736424cc4aef","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.20.0.tgz","fileCount":40,"unpackedSize":533331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXW82CRA9TVsSAnZWagAApScP/RAKspiqRvgb8pBU66s8\n98FdQfonzJMCh4T9tlWFOsLsA6SRhvaMSjqPF0Tm5VPoyh75hKHzD7nVZpvD\npdI3KvoL652uNzzSIhkkPRK/e6Qa1jAkuccmTjBSJzm3yqer3FqZ/xsjG9kT\nVTmHw7lR1FBSp5UWjnSiioGwhxnfAU8Oh9DxaqxjlKNPGhG68Hh8GQwRNasD\nvzlYrYCdx3W6m4knz+4y//DFNnDV/qZllyD/1ghFbIqBYIymWn/3Wl0TsoR6\njKI2Oh/wvgKFtogBruCgiaClMmCUlJ0Kf/6SEy5HaTN4lkmALTfGsaQhZQOp\n536D5BGZKJGXll6xYsovWiRycL5rwI41/abb77rvFvDp/tLDRqSBi7AurE63\nwOHjXHJDaytGFnFFKSko858ZVb+iotMQQSdUg3UHONdyceieHAztlbL71wJc\nWgU9eYWhDtEqzaU0ne65JZmramGlmEzWFH9Ero4LZYjBZ0TWTTIi+5tLpl22\n56zxYGEydkkjAJKD2/eQV+wr64jm8+MfkYHVIKMHXUp/PAYCZvWXKmuVKYlY\nXAH8V8xZZL1+KwaXWBrGzwbVo7MxLe0hu3kvYrKLCPUCxlD6iNdF7O2lHA9Z\nuK9r82qlQkDE1NGdHrr8gJD7kWBxa1clfvRXujfwPtgSMONTAsoZoTLhK/SB\nxsP0\r\n=TuCb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChUO7iS8ED6EzccLg6/HCxxZbjsfsu5wKiIWiCa4exKgIgZTgezQ+gi3VTf3JnA+VL0Qbv202Wn1tSzukmxxzrx+4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.20.0_1583181622083_0.18916128628610052"},"_hasShrinkwrap":false},"0.20.1-alpha.1":{"name":"@react-ssr/core","version":"0.20.1-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4e648bae9c827145519f03c4d5844cd1b52f5ab4","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.20.1-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-TVYaIuQ1CjbG/xZz86ffTDNeGxgwneUqD8T9BA/iJ54Yz4DyVnkPYk2L5/J5DPKuEcG+OcW5dyW343IsqzybyQ==","shasum":"d75ab4640ef500ca0aa7797106b83a0fbbdab313","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.20.1-alpha.1.tgz","fileCount":40,"unpackedSize":535395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaS8ICRA9TVsSAnZWagAAUGsP/1Zkp6Vh0F9Tj8/RtZ2j\nNpP0Kcc39wyNN/uLI1JYIFTgHbzH1u0S/IM+9ZQvymX86klI+4RXxVOM1KO8\nmWpxLSTgp8fe2EJXw6uCc/NaatfP7foD3UzTYwvo/BMut9sTPm9R2IQlVvBT\nCg8zrObMqXSjERYcjYYoelMjIS41DS9BjuYD7VU0aXakdNhTjbzIBaoC+HBX\n49VHBK50woq876Cy0EiPuIxmYZuxZfIjfBxiBg7EP8lXWYkmcr2WwYGOokI+\ngTic1vBPUYhhbZKNfAKzagwjIuBZzOhoTxbkmxifXu0SKU/Q147ozfsx4B60\nxmZ1QGlm2Y7RTEDaBZQfDfxRjbZt544yg5pDvvJo32hY46Jk3pIYSwAyMcQj\nEES4fIfjBGRxjZ7EELenJb3VbCE3SQOHZSQYs8MhXdCPiN5g7ny5FcKED6UT\nruTgXW5CxLOwcL5lOIWxSwDk0WpJMISzNd6kihuZo6lnLGGUEgnBFGWmbNFU\nMY47s25Ad9/5Qjq3CFxn87XMC/5SkisO9AkzZnNVW2+UrAHJz1VvhtJdPins\nGgSFvQs6ZBivCPBCbFtrkV1wl1CNntAtKCRQwDYW3Ifb6lJraP0pqOx1In2q\nUtvGG7sJAo7rOPFYTLSze/jsJ3mWgzw3SVdeRDUzUenMrgKReYOHiYRM2CPH\ntL5o\r\n=Mf9d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIED/mC5hULIJCm06EHiEVy5Mgq/V5rxtvNh6w6r3m/a9AiA/YZBrk9tEQm3IhdKOTtxkyAiFED6HdOrc2veXi7zO3g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.20.1-alpha.1_1583951624160_0.8545380144723895"},"_hasShrinkwrap":false},"0.20.1-alpha.2":{"name":"@react-ssr/core","version":"0.20.1-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2a4924d405b19c5e61496e785273dbf80788b165","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.20.1-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-rbafRBQcmVxZdWlS4qYvLniZdZ+f+2PHTC8OboVIYWMzgLfNLg3KiZB/NHE6G3o2KgBQGl34926pXP5U/jW2QQ==","shasum":"35516c783fca9e789d2ca0a0d23f5f02aa70b09c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.20.1-alpha.2.tgz","fileCount":40,"unpackedSize":535251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaS+wCRA9TVsSAnZWagAA9WsP/1oGWSE4Ha5w4+v+w8PM\neMTQZJCpfsezLmld9lFXw+kTKNvOGtrYQ5Wa98SP0QkKeqSLXi5FeOYkccxT\nk3Aln8pYUgpeeDlTiiLH2Tpg5oQKCmV/XNPCuRmrfqwZHTCABwkg/M4gwnqy\nsELG3JspSoFw7GybWGZb1ZJgkyH9WEkUFwEYlZRIzd2704eIADMwS4y76UpC\n2GYC7QQrFskBE++0nAhKSVM1860opShHR3n4eBB1F0puFVbhfjeTw98U/SqY\nX/l2msN0s5/1E9ODjnywisk0a1vx90HWsW6RNw0T46WB93x8Aq+kXqpznvaS\nUbbgGA+ePjclEW9o1JX9SqOzlGmlSMhAiPn8+2VCMaPJmlwybzymYJFEUPBH\nDdCHXqUrdQpSCkWUCaqBlqEP2OK3jSwj/xmrzpuM7+4MGXgG+7nYuU1yzbBf\nKlCrJRLhx8IyBIv4ZA8ub4NsQo97MiS71+s4dXh9BEMgEVScaLKVNzxOzysT\nQDH9YwFuPildGS4KqpEgCecftBOO4k5QIwybRPDjCBOCvl1BlR9PA7tGMAWz\nBykSZgKiqvtly6R/hgSnu5qJxTibfI79SvC9XklgKhiglV12GeBXh+eCuyZQ\nPnO/i82OKOAWm4Q6BuigTl9fX22V47/T6qvPz4kcA9hgPklZxbz0gNUEmB2r\nt9kV\r\n=Ygd+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmQ/7Aa4Kk71Z+luCe8ctgqpwLQOPy1Qkl4gKFSA1qcAiBj5aC399t1X0mL+Y5ko/evWepcdyku6r27bMQRKrOKfQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.20.1-alpha.2_1583951791925_0.9123496053983624"},"_hasShrinkwrap":false},"0.20.1":{"name":"@react-ssr/core","version":"0.20.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"18b4c95afa75a283f8184cba2208c07a4b7a7257","_id":"@react-ssr/core@0.20.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-0RWCyi4aF7ILAuejYoiH2PTwJx1i5+/Ns/Ppw3EvoLl1OLVEGtxJegTRJt5WxnSeOG8m5WZp7UwpKyGUbb4/qQ==","shasum":"ae9db7c8f99708e82f48a1e8b2d322d6f5dabe17","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.20.1.tgz","fileCount":40,"unpackedSize":535235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaTAuCRA9TVsSAnZWagAAq7cP+wbGUKrLvt8wjgv7bL+C\nqKFYUItZ4gzVY2MnlsMt5Q0FjGksbGQUIqYd6+s2/kRtTpb1Tl8SIN574Ho6\nK+zLngrHoRQEev5zdwfFiUwu9obHm4OKcxdVa1DEC701iRM8NoE+gFW3UXKU\neh5vU4j4nudfi44FMmJOoLsDsFJsChRlZJZwQlfBrhlosTwQYoG/Y3OIzCPZ\ne6Vb8uL99rO4myI1HWBFc+BTK6fBLhDrOhcoATFvYpXsZJnr3zBgZvdKxDJB\nBEnJgh4YSO11WKcGyaT67yQtESoKaaTKrDAASaKoDnYykeFL9EteJrIV+aPi\n56FkhweC5K+oMpNxmDeL1r/WTRIoqczmOca5Hj9Z1yel5FnT6fkXg8PsDd3u\nZpzIi6+KIlh8zPZcZZF9GgGnghW3TFxnQm8llX5OZSzTxhn2a7wpQccplvua\nlkNaYFIyFbLA8voi1QpMw+15NkcEp/9pRnuH47jgNU0ajYtsjJ1zU9Hi9NBS\nmYqaGa66E90k7ZowaICw8vKSIAuR7EfFw5bR3kFkwggMnpUfTjlLvYQ1TazU\npr64tOIyt4SAUS/BxjN6kPrT6IjkgqvnpDwi3HIm83F9uHacZptvrQ7OzPxf\nr5AsfMtmxLT9Qf7qeKabvi1AajGDIQlIAvJSZhLK36W9OUBEHaoZ+fwSxZUU\nigBN\r\n=KHre\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7FC/mEfnxuYuStwjyBBp0ZBVTq5c2Edb2aJSYDgGdKAiAOvZF4XksQp6xiU8k48JGUMb05WzbtAMDjQ4vDK6ZsYA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.20.1_1583951917745_0.6901043966409648"},"_hasShrinkwrap":false},"0.21.1-alpha.1":{"name":"@react-ssr/core","version":"0.21.1-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c692746a1fdc158e4b3d46220634fd3bd7f96d1a","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.1-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-EI/xZfUDwh360UyZB9Y3V3ailZcb8lge7s3OQ7gTc5kfd3Nrk6bTAU/BdMtRrPtuK+eEG1vDZ50mMJkg2I5aRQ==","shasum":"ada5e6d4d38561f96e46f33b8bb9f2f2af615229","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.1-alpha.1.tgz","fileCount":40,"unpackedSize":536016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaoBICRA9TVsSAnZWagAAuSwP/iaIDv6Mnrj1nP5J5d2E\nT904DbNf/gZHpMBnCjHSHAqkJ+eCYSUMv6MJxF3niep4q2gZvnuQYulT7cZ1\n6dI/nRrC1SqyVe2v06UViqBfOR4idA+p1SArhmeBq8OY1h2ely3wLT4KsZXy\n6ZUXaC3huUornDyoaALP/jPOLQ8QWggwvecXu3Z5Mlx1egi9M5wjqwaVmWVv\nmMspSShQW6o8RrIlPfPU2rV9nhhFhjUCDECDV/pfmlTfUe5TVbGLVF7VbVRI\nfWa6RweQaBjxItV8u0b3PZfIgyKK8D+Uxsl8J3XjP2FPKaauALttgBDLszM4\nGW7lZWR7jDtxohFxtPCT3O3MCQx6buxrXi/UtKHaQ+2Hm9yyNTQWfFCt+23e\nNxQyZeKhjUtKHOMasMqvtpJoT9UuiyhQRcPXf8sMn6NQExGcRLewIXS1pP0R\nRaDGFfB9LCuwXpDpbdUqNsWU7QlrnfZN5Xjw7qlso7v7aiRTMQWMLgtKTehR\n3L97BmtkI9aZRGzgWDqc0h+2y4LIZXHuQJP6yOQMA5HN9bHtAY+qOJbb4k1T\nI4fVWy/VzooThdWYClsalckyFef5xAdxoGnunFyUSOpQglJXSqxxs16qYn7x\nV3m5olCfZrBT/HDxeVavee02JXpeWk1WDPYNJIJFdK/3Z1yjiWtCuYDDBPGP\ncUVm\r\n=XWNK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICrGWVlfY0kgbB5mPbmVVTyUfA60+MzPyK7nMjIBlD4HAiEA1l25oe4iDZma7mJuHde1FanaPX0GUWjAH2wrc/guZ2M="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.1-alpha.1_1584037960275_0.8334325886091833"},"_hasShrinkwrap":false},"0.21.1-alpha.2":{"name":"@react-ssr/core","version":"0.21.1-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9c73f7e67944b2750d053429c86d420f24f31cb3","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.1-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-6cLXv+d066SFgZalZU6kuEVsf1Eae7KkXTWvHAvtL8FCXn2VhXplgAWE6cDr9hb/olCPHL7jmi6nlxDEWoEO1w==","shasum":"5296d3689e90a7ee188a81a081c471286eb7ba9f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.1-alpha.2.tgz","fileCount":44,"unpackedSize":614228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaohrCRA9TVsSAnZWagAAJCoQAJTLSz3t4GwtaGswYYB4\nYIuRwtXM/MfR7cXdsw9+zqPK+v/+jqMl9LOt0K9MNnh6B0RPrdCGgayuY0CQ\nTimq6f5fNEQd+9Jt3KSBdJTC4zKXLxFmovFnc0ByYqFpcgc9kzx2popbNQPs\ncF68xWG+Q2+S0zANb9L5lGQvyzou2SdfDY4YbwbFyj50vk2vD3GOnKYPoAyd\nBfa9mCCymL1C4XldWmEsUT0K44PAEva8ChiBVo9OXSXwPcK0LrhsqY3rwa0A\niCa+HinUsEIs8u0WqytKwtFywA0CYybd51dbNm0t/N7I0xQZqGihWkqE6pSt\nydNJtuA8sG7M2fJ0oa7S9+Bhji8tnlobzjGRMoYSUGHspDjV+6/BXfgIxB+R\nFAXQVPuKC1MBGW2h0j49u9Ur5ieSQlL0FUEWUdhPKMM6oT9NBm9+3gN9R0ln\nKREqhYNg339RdrelyFpwzu4LV1PMJd55nXtOQw5UZasMEhEFkK58C7MDvOSn\nfDnXFWOS4VlkFX0dDQ1OqgB2k7gc8lbjxRHI0uaLquo3zM1+RmQb6DHgg1BA\nbpvQlXExShT9cVcMUpf/ddjcgU9njsOQI/dg43K0OlVygLfGYfsUhGozvNS2\nQFjRY9Djg8y65/CgY+kV0CCFtDL7OTiDHbtzsSMHpBZ7UppBzskWci1eSAam\n6WFC\r\n=qscW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgd8+hGd3iO6HvZ+zY6ig+EjZLzFJey2nTldCwgpkvMQIgJlrQfzy4JEzx8RmeNH2K61lg/pAkv110sqNfEStzKiA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.1-alpha.2_1584040042917_0.5852582104699984"},"_hasShrinkwrap":false},"0.21.1-alpha.3":{"name":"@react-ssr/core","version":"0.21.1-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"957c7b8979993c27dd1018dc25d3dee0b0bdf587","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.1-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-2E5a9aJtnwAxNKlk1tyZauBX4YlWeaR8EZhbGg1VpwHuSRUUGZxoxolCoDBVURyDeYpt0FuQkxFEYRdMfj0sWw==","shasum":"c40d2d4aa007ce18888ab4af78f8ae5b4f898fea","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.1-alpha.3.tgz","fileCount":42,"unpackedSize":458672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaoplCRA9TVsSAnZWagAAyYYP/02bpROKVgm929kblNuc\nx+U72Nnv0o/iSGEr7RZHinKtnsAJiO7t2nD7S9wqVvdjLL+mli2Tdr8lVAhD\nuxNG0Ok90LUda4Hz25T7A1oE87w5UBGfZjbO/KPMtMaHVYYAygS6KSRUeMWU\nXsO+T9/04RUiWGj1NquxYk/fW3o6EbdOgCV1jSsnT5fRGDj66SMowt8SLGVs\nKw6+qzskaLSGkLsua/alYEKrOHBKfT7JyTaMnrVrKAc0grn0Iy7DvHJTYVZj\n4MgQmhxQMf/7cNkgO3jBQGSusNK1y0v+JQSoxKgt2Nm6tEfAf9XeIowT9M1g\nW8Sr48mzf66/LKMS+ci5GFf6l8VHXfTrTTfN2LDSo44t2poifU7Hrgslb5Eo\nfIZSq9bKeZMOsuli/8vRJ4Jxs+vOkKFvnr+smq3qVuQ7Xq6KQDN8XW8SzBO8\nxmIvYrC16Rxjf5KN3KtM4eTlEz2WNceB+Y0eQ6/ct+23wpiVm/2RdLQQzJDh\nYdGvyntKSmyI9ka/XLMNVE8v3vBCKnpy9X8JwGjqud0qxjwLnWNh8s80zxld\nj9UuZo/Df7OJJg0sYWe5Yn8f9T63BTTO/nm24ygbc+auJTgh22Uf2eypdmeD\nw36JhB/HMxO9RJ9rdempm9iUPhNGjAL0YszCnvaQbY/WaBeBJiXPEAQJbmkM\nln1Z\r\n=9rwL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFR8RwQ//NMp2FOzFmtSmmXY3Ytm+BtSq6oq/Fiq6d8FAiEA4Qjke2fn2P+Rj2cMUx89gFKWDrp52jbrN9CgzB1Zc7A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.1-alpha.3_1584040548677_0.8347394850809298"},"_hasShrinkwrap":false},"0.21.1":{"name":"@react-ssr/core","version":"0.21.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"bebaa2d5212784d0644d40db060a328a8eaa0f2f","_id":"@react-ssr/core@0.21.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-UxZ+b1rtBNV30GYMkUremiflRdnvG1RepYUb3ASLm1a8O7o6hrm18hgLm5JfZvUhUnq/6ibHhoC9NykX/6T8Ew==","shasum":"e3cec28655076b62f66328b77298963be3f2d75c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.1.tgz","fileCount":42,"unpackedSize":458656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaovrCRA9TVsSAnZWagAABDsP/jjGBQ95Cf8x95JUYqhp\nEOITNgl5va3GNxUmvIv8zURyfsT9yCbgiWlIXkW0fvTyREL0rxjzScmwQ4sq\nFMYIysQBKcBVSLgcqQGMbHVqdx7CB3vVemSRGxeZuSb7TBiPqXD9h4oqIMzC\nayCQ46DvZ8545MsG5opt2+xgR7dLC/Cnu66Q7DmAnK8PyER9mWbTRWUORoTl\n+wVNTDTiHH5g+JXS+xazSb5Pb1hHGOjDpwVOPY/yu5XvITkJP9M98Mu0l4Bp\n6b6Qbr8lh2TVqWwzsKUwZm6/2oyvq1Txzsamd+YF0a2JJBjJGme3kMGFs8uE\nsDyhHO5TILGMcRwZ8N9IrJwDtjHkgXUOHuLsxln0343IWbxv1wID1aqc5egT\n9DVBlcJLworjrtYumDaNrP50z1cbRieHZEx2DHarjsvfvMbiKXo8NIeVK11L\n0p9mM7PhCXszJWZ/2U/Qqp97cJke9MQKcjs8F4jHnriaOr9ualpCwGTzKUBc\nocb8zPljNY3q4p9xrNVBWa86yXhGR+mxWYgltd3qX65JjZ6oP1sEdoi8h4I+\n7UhQ7I06keT5fUVN8WOFt4dceYOfaoyrJB66XlMTN3A5nLH8eMZnqgyIz0TQ\nPS48bbQVRzgoVH5W3tpw1nIMcNtf1pvbVz6A7Hzb0YLULCmKv3DjEMrV+R/n\nrdcU\r\n=HS5t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcV2rgWATbQYmHmedE5zBra82WCVBWgRc1wwXWhK0HEgIgM3CW7LREYc5NP4IZ64G9kXoz1F0JdlJwkv49GIgPaV8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.1_1584040938946_0.8989157407956667"},"_hasShrinkwrap":false},"0.21.2-alpha.3":{"name":"@react-ssr/core","version":"0.21.2-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"db00c754bd70ad05b4fb9f12459b7f3c8ee46369","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.2-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-/LmnUgNxUWz0AKjBTrfEAbwqpXTH5eYLRfSL3mHcYnFJa+gezkgVJzz0hZp6DX9yLoesNB3Dhbl+ttiuUUmX0g==","shasum":"8b3b840d9a914796893c02724f0a52cee3270a47","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.2-alpha.3.tgz","fileCount":42,"unpackedSize":514501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeapZNCRA9TVsSAnZWagAAE+cQAJ1e6se56iWsOrQx9HL1\ni5jnzs9XQPUhu5X/jdUrSxxgwKzx0QZEVjU1nO9GdngA2+ifmmHqYj+RDkhA\nPZSNjITY/i8zwJcnyHqHozcHXwF4TgxAa5q7Qj0YWEClpOawbc0JQ8WI13re\nQIE310+Q2nGd6+4odG4LspU+gcfz88GMy6p+QbfYo+SvnNJsfMnCVJ64GWUf\nHu0b3V7ub5PGI9tuX5DxdYnpisACUZs/KzzblIzTg+huvF27Rqh7WTYqT41G\ni7PuNSTbVFmFSryXoUx74qQKka7EUErr/QBUszVlXkJZM/tAFLV3lHCIIr3Z\nnRcfpVa6E6nZsNVbeK8igZs2o8k/Yg1JyDzBOxAESpue2v4Q9JXJRuXDxJY4\nDyUMVr5N+Fl9M2lIjbrRcboZz6v+W+lqySD2fQGh68ug/ybVf792AzVXSuJc\n5fwyHfGMfB3x7thbGS8QDheS5fzocddA+IWqvieBeG3PnQkut2XhVuwsfWs2\nRpfsWtd30ArQOBPRThtDlZhxBMEpm6XQrGFOgCZkrFQcvXA4erQ7SxbYGjRR\nTsFDOaStRbreo0t0Qa8duQj+YidfMAamqiTNGjmxxnIZJNEdbchx6Zfmdj8Q\nStQAmnL/PCjInSCZOJPLdhY3mLfi+UabHQ8bwR0pzTaVL85eVstwd4ol5Yy3\nZbqm\r\n=Esf4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDE+vWpfuvDChPIAaVTOCCaX79qKVvv1DMhxCHQTFiBAIgG4ZsnxV1VB/BXm01W6CvAhbOiMZk105NkZ5Zu0Snh2A="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.2-alpha.3_1584043596955_0.8223926325139139"},"_hasShrinkwrap":false},"0.21.2-alpha.4":{"name":"@react-ssr/core","version":"0.21.2-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6ec534960c970cd2fbd657e09f72d4ddcfaaae95","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.2-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-SxZvr8cN6ssnnXX4oQCBBwZatWuvPmRVJ/tYGwrFHPRZ6/OzgsQNlU+k+xH0MjhOZnierm9LOG3O8WHIOA7j3w==","shasum":"d644d1ed7a6eff683836f7ce9c142a671deb425f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.2-alpha.4.tgz","fileCount":42,"unpackedSize":514960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeape8CRA9TVsSAnZWagAAJvwP/24vHQgAWe0+NZcjINKc\nFoFUO/x6ERr7BNruXnZsWvodBRAnPvA2GtxnZ89+Pku9UMIlvuq2PI47g9gy\nl3cvWsIccABZmbgMEr9DRvLmZqpaPCNTn38nqEvFBbTVbAmKITkqb04XFA7o\nbhcMBh/RbEkYNy2h8Chqpdyt/vnl+3TaO17hHDLdBRQhWA5eahFu9BuKDCfp\nxQPio9vOMCoMsK6rx+lHIlLPYNea/tqde906yvIENILtawJco2ibX1OpAhII\nUGCa4xkt1TDE/IJUJwr+k1jq3xnpFj6VHEEJyBZtOIJx2Ni2Mevyq15IaJC8\nZV7KJ4fMSHqPjL7nXsFQ7xWPpXJf0dDGRMGqA861QyCFOX85C+UmRlwnWv8F\nLh+Wj8wPH8aB0pnA62e6cUHenhMN6mu5Ve3wgc1OtLghJ1G8C/ZNuYnXatZx\nsDXXi2XZf3FQmxUCXMuPBwfOdsu80DB+gd8QDCdKX2RlGJxIL2UBhRa9g5zn\nQ69yLHTkRNJhvceJ73hm/v1iYRjvcS/5xZN5nTg0lHVHWnnP1/Tkh/cGoo37\nLAyXyoDFpJdKDv5D1RVKDMTGw7EQoMW/ZX+mRzzarV6OAiK3JjfK4DuDanfm\nYKbh0sO7njvsrXqA8C6Amd8alqWUCP13Hy1gjgyWdEEz2Ctoof+BX9De8imh\nF6vT\r\n=RsRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA4TUiuKkVy7B5ronDljIw/vn/SdHq5yrXVEtiBjmxtXAiBNI8k8zDQ6SRS6PWa950KtoxrOxCrxbPA77TeCoPqKsg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.2-alpha.4_1584043964149_0.12474419812776483"},"_hasShrinkwrap":false},"0.21.2-alpha.6":{"name":"@react-ssr/core","version":"0.21.2-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6205f203c6e214d851f8263b1dd10327c70da700","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.2-alpha.6","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-31PfWusSLViMsly6hMQ8vt22xxx2aE69Oy1yu6Z+Sqs7NH8sqmwATieuAQ4Ful7a2KliK/vZXjjyRPl+lHLOhw==","shasum":"8e78fe627ec5b558dd6d00dbd5d5e2d45c476582","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.2-alpha.6.tgz","fileCount":42,"unpackedSize":514873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqBxCRA9TVsSAnZWagAAFqkQAJyEc2gmWNJ5X3HSXh58\n56ttynr3tcAnHn3rhNbuvz9v+F7zQ6DO2cb+kemfjqwCjp1xhjw0gcfFb+Mc\nCJ7d09OtDgMciDeDqnwlvBjYKFCuEC+RN4n7ELydjton6s00/HNRKRFbExbG\nyyrh/qHIbRfaVYAsfL2TDoraLKBjywMzmtcTeuGlJi7k2AKVpbqq2sfyokKv\n1XQF0ksbBQFNt7N1Tpw14piriaGbFa6QaSTe5f4lH1GoPa40RV54cm9FiVL1\ncqn87vSgfEhwpSrksEXpGw7C7jGbNZtWKa99PJ4BZR+K+WkH/a7dd1uSbiUE\nAiPybQ/TTJ5Ldce1k+H7o4l3KOJZuUXisUGaJ92x2mCcGKimv/ha5iF2Br7w\nklx1SN9ssLigKp07n4hcw4pJz7ut/7xQ+w4FVbOkfkmde6lbi4th9cdB8GS6\ns/rDZ33szxs7nQ9LCCg+6zIz1NJGDgZEsWxcXdOvjC8PJlmDne0qsgppOMYz\njkKnXmYpX+NGXfrybjOVSPGXT54QuPhBsneNd+7EX3NTeYworn6pLqbvVQzs\nllMb8+8v8rlRyhr3tRnVfarc/p+EjadBdKCqdyzasLfGYPZpFrAYO1DBrHVR\nDmYiFf8/nE7UYZx0KnrJwc89LqiCh3NpnKhQOmymAyeonSJsGfpvnWahZxkT\nL3LQ\r\n=nY0n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+ysgkxVJ8gptyM2GN0zG5Q0x6IWv+QWFtfaklELQRiAiEA7JX5hQgVLf8TallcSMosRG7tSYaUhvuw1Z0z+3680ZI="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.2-alpha.6_1584046193344_0.8087934382464634"},"_hasShrinkwrap":false},"0.21.2-alpha.7":{"name":"@react-ssr/core","version":"0.21.2-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"32e6c7050ae4fa9d06e4154569ef8ca7638604d0","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.2-alpha.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-kJPmWT2QlHDc0PqRQTkRzKf6PLKWAI9mA2MzlKKhYoBWLm2/vEuq++FbIDhEFprmarxu0YKKcWi8gd0gmFOxzQ==","shasum":"850ee1938ae284fae5d44336114223005d2c669c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.2-alpha.7.tgz","fileCount":42,"unpackedSize":514849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqGQCRA9TVsSAnZWagAA0XMQAJnzPtSNb3J9EWg2by6G\nvHLSvxLg5TkjyvE19eh7+v3LaqiGlOEAQC/B2uyqTQcny3ycE+WcgTQ4jRwL\nkSwWb+KShBpEqRo2kFbc4aWPcKhCGpvpAMl/mDI4ZeVaTtsEeFF42ojX4Gkk\nRbSK35EJZiydXVrnmDrP8jqjeupb7mPKCfY9HXstEws6fbi/0pfgAFEX6zcU\nZQpDS63wHz1NhrITuHcO1VxCkyn9OUf8kyYRcedVeGO7ha8sOzZ9HiLBAhMt\nQObPuL9yJwhzdAbUZV02KPzL7zBcVCL3B2rScYdx90pyT/dxxgKVaeR+34wO\nCBPnR0ObjRw8TpdeHsUO8trFKJVOVNAMhrlFrwx1hMy2kJUZrqoYJNm4O6TR\nymt1BRmHWRCe+oA8v6OVWbnh9OA1vdMcQRO0ysWP1yt+zLXxlZI2vtpN80hP\n15CgoR4V+is5Z+O07nLMPyCt5//eXt6LT+PJfOE/ImaurmjmVIouKW+PGW9T\nYGutPppbhh85QG8uJGDRfJI0uIRU/8ch6JXEoXdDwNlzcnM2lixGXTnqVJSz\nVG7G3SdlCuSaureMX21xrMj0AbDVQ1l71lkWMUd2r/L/v6mciosA33rpZRC1\nDnw8+nfUGwD0Ej7p8u+BjF2b/DrK0bomdOtyE1b3taCcFhDB7ZK1JQZLmE5x\nbSn3\r\n=7Tru\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/Xk7wDOObX29VHLAxcoL+tZiRFp4gKQlsbBvxY8nRvwIgVYCi0QkkRcOO4yqmtvCz7nauf4P3qQEqU1C2tyc/lHs="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.2-alpha.7_1584046480436_0.1581148653063651"},"_hasShrinkwrap":false},"0.21.2":{"name":"@react-ssr/core","version":"0.21.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a9617070a4e6f502178fe8a81a9add4b88299459","_id":"@react-ssr/core@0.21.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-0mI54FJHT3WivKX++xFZM4ZE5oau0G/m+WDHf/Lr6DfFzrreOCircE+Jd1UNzb7kr1gU6ZHvuXO8JuDSe8/2jA==","shasum":"ed85ce079cc520c06dfdd56863b08a8e5fbb6c8c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.2.tgz","fileCount":42,"unpackedSize":514915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqOCCRA9TVsSAnZWagAAodYQAJgUwTjQqTDhpWz8Mlm5\nZ0T3zdAS9K6MtAlsWp6zq64uMLiLd3VA0lrKfGx1bum4mV+I0KWX2HgVNKX5\nvdyidjNHDSlum4Mg+Kcl3MqdPwl1Yv7OfCxxOZjLMsk95c5RgATNYQhiW3ys\ny+RVe+5aX4xVubed5hkiMhnN+40auAYOOjDeii8uXGldTOqfJocpImGfp/p9\nq9ZGavUQ5XHfP1ODeOeGoXFk7Hx7LvIBaXwW7drg753rAINdRoeuUgkhibff\nL0/ved/W2zg+ZoIhFaPaSqg7xYVF+NZjUMjl4xu/rPF+TqIeeewxDiEXBwV2\nxvz0XhNfgYkxi27iV5hB/jY9Jv5TpQ7RJVsC5veaRiApWlCHyPnD0fA7Ceap\noyKlwBBaaWRqhmzdgKPCchcd3e4yqHdgnMZ/cVJ8nblHPkoG0l4wgOOxrV9z\niWpEsVywfovuC8niGXCKLsug/xI/+ShDDE/aTrbjxf35bk7ag/XOxC4bgy8L\nrJiEG/ROoCYlYEg+biYs3asA1Q5ADpenkI8z3JDTJHbqZH5j3/8oTUATtvfB\nsIZRSBleA+OfW5n2U17qf6lM4nOicBopZIIlSCobNiAZ//p6s2Bq+l9T2CnP\nhTkhVGr7yZ9CeeONXELRDyrhiLiQq4FeT/K5m2VCbt108ffzNN2VvYuy3WH9\n7ZQk\r\n=b9wx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDE03UFTodatyuq2kTkOtGV3d875rwerhAg9EDVUOIYBAIgIlltOKPY/W42h3WIbb5+Y/Xz/WiNUzmfCc+dY/keN+c="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.2_1584046978183_0.47296982948953015"},"_hasShrinkwrap":false},"0.21.3-alpha.0":{"name":"@react-ssr/core","version":"0.21.3-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1eead2671cbfb9ab74f75c602e40fd0484be8c69","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-as0ZtaL29jh326PP2Ezis4EgYOagZjoJ0QfzIiupVXuwHShzSqtQErKNQ19gdMQdl3eg5dyz2RqBFsOf5u7uKA==","shasum":"71837effc0ec4d4516f58166cbf0b697746b20f5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.0.tgz","fileCount":42,"unpackedSize":515260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqcQCRA9TVsSAnZWagAAlVkQAIdd1252InWR3/H1DUn6\nDr9uE0isE4s638mx8R6Yjf/iU3HwSkCUpe7JuTJAxAGEizfzJzWMwALd+v8C\nYcqbcEu+I/rPoNl/bUhsQCVf4pkFgjndHBEMDqoripnakI6+ORDokYSAnS15\nS8LYdc1RHfxGMfbW+Oxx/D+dOSfNhyEv/BNop3dGQ7dwTzOwdoXxRAOaY4yJ\nQT32aZg3xJH8Lm0h1d1pc0XjbWvrffUj79ptksYtZBorAkS7k3jrZAktOXUO\nAYRU2lX0KWo48tI0WhzTSQiPLYNrdb02czIRo1cal005nlZTI1d4HfXsVuB4\np1GjCB5GB03HZhhxoHVluSIABEnOaoIVdC+yZPdaxmFSIsz+yX+3NhFP66TF\n9xwHl9uoAN705WZBGwbZkgSHMliHJcBNNnsWmeKgSNmB1TVaCk4B8Dpwtq7k\nnd1z14NNQG6I1clbAS9GsMXIOzGOcAsW5E3DMnhXb60PFlH+OJH6dF4Q1obT\n/8+wOiQt/KGWXF6r69U7sy8jEEAouFjm/HevbhuU5inMK1MwHOYwwsmUudt9\nR8uyzK1KEXcqZ03DJzfaXDPhAfsxsYFjCAPfvs7FizfqvFSuGLDb2IX2imnM\nomSilRk+1bMpcMS73vgVbLYZl/5uDe4CNZT25XeQXoXs6xTvkTZFJN0weam3\nFEso\r\n=jLd/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqa6ghQmfgYFwAhg/nslV2LhIQXRtCbGAr97iwr+mKpAiEAl7ye2k9ugEEdEbUA7vleb5xH/2XUDEUfCp4qoa5oYpk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.0_1584047888241_0.13460037236348876"},"_hasShrinkwrap":false},"0.21.3-alpha.1":{"name":"@react-ssr/core","version":"0.21.3-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6da2718b3608751d80beb24d515fd4b38d3ee066","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-QyhhBTn1txH5mxY8pwh1x30g9zzig3Pmfp13d2WBY8OriCm7nTv1dSVyXup2IdOnz3kPyxYMAoNIrw8GFCDk9A==","shasum":"eb7a7722a1f4ce3ca2465578e0a685d246ab27fc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.1.tgz","fileCount":42,"unpackedSize":515260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqdiCRA9TVsSAnZWagAAyo0P/1NzIUuQI0JQkChkdYAV\nW+1NbxYad/rbFYleW06ldXkx47fq7dGwe5ms/dUmTfsbxTn6eQB0i3Pr89oa\nTUQ3vldPdOvdNEJs3lASHK/kmnfS2U9VRBhGRwtO7cjqsci3exIi4OfEaRdA\nu8till1BK9GHXwLJDydGSW8ZoTi37XbcJ2g42EuSRFuPAz1m40L0Bbi59jBc\nhQtDNssQnvKL5zBbdjwXVvvGcgYtA/AseecBfkIZlHyLTEEjgN6z4aHSPD3p\ng0/6dB4aSsNu5/UwnNc616sV9AWrSj84O+hkQRooAyqFQsBd6QnzMO6wDbml\nPY9Qk5fzXzL3UzgkqYZRG7WsBK8KTmsEl47svSqOOByPbKSAvqKjIDj4crWn\nUvqOwNZ5U8xWPWMFjwrLGNTDFoH0aCpa2qU2gaNQSEOrJs0Y0btomtaSU48b\nSuOVlxSthHgfnD7ym0rGz5eZXNMUGYuy/t9497CHmETsuuhKFkND1nqjAjhI\ns8GKclZY7gxa9TbI4xENDYp+pDfpq/Ra3pO+fSjhh4rfp0riO0QgcGBWWZ84\nJtqNPR8NhaQL8XIGuGBVrhAHhCNGGq0lC8+jzc6Z06q7GD7LrZbMAAilyP8e\n33LK69lQy0Wz7lAdfgKm3tlu0hxYzda+fKCQuEYAqvwqS0PIQ36cjyOnJhtB\ng7Mo\r\n=t8Zg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFmGeH7+9XTZ3wxh8sUNjwA9oRUy3AVdUYqN8HCCVyayAiEArn/VodLbCYjyMY59LjjeYtQ03UXVviJNSnP+vZD+bLM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.1_1584047969446_0.1409434154099718"},"_hasShrinkwrap":false},"0.21.3-alpha.2":{"name":"@react-ssr/core","version":"0.21.3-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b87e29d0ce04892d2379d19be36b3480e82ba0a1","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-tgT4sKLX+5y82YCq/XHAF4JEcK11ylqiHYKvy43YZO0tSytEUqb/Ck392I7qR92Qs/+9Wtn0rk+jzMpNZrcJng==","shasum":"4ec4666eb73e175c3b252580f0b9e67358c6ce91","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.2.tgz","fileCount":42,"unpackedSize":515310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqhvCRA9TVsSAnZWagAA8OUP/2BWTyA4AIoUGBA5GpVZ\nbSNuc8q/0GgV/UEJYU9t4kUgWOi9onHr8UB4LwPqEu211k66seV9KfEMACn6\nF/3852ZANYdAyZAHUtmhKjxVlM7ZcTKzy/10I5v3zubZt1d33giI5Kor4/wf\nE99b6jGWdcRjZKKodHYGMLbeVp0E5MtKHzkfCLNnj1KYx6flSqbpEA7SEqvO\nLswAiZ0WSX2qs4FhRYvKvI3v6jU1r8lfOaDVXS0cooJiyvQG6XHqKvaziwsz\nHGM+HSSOgWTWMEF/yquv/l7YkLOSfB8YPfL36PjiwrmsZmkYeFL+u4mv+Rh7\nTJAjMZV6DRXj+rU+cHCXhjoEWx8zE5tdEjS/42rEewk78QAiDsnjbpKsp8nX\n+VAtZZjeligZlkZ8OpavxUfq3n5q93WytGcVY9MWxO6Q846N+YFq2jeHUsms\n+zOlen20XB5uAMMdehGIKyYzJKEx9ac09fa82jgFNShuqB49FwwLV6SFBmMf\nT2PRYE3SVAiF6b/zuPPQuBJQxf6RzL6W/87fZVO+ct9Vje9Dg+yoC2NTiP3g\nex/aUutMFyou+AMBOBKy4PdNYPL09zHU6qoLMvv7IZnaUZysKq+FUdm5elDv\ntiD7sj2oeFQzIYSTdyU0KAR0ShKNf2NiILqSp3IZeXAdAsfR/wTijXIAUcKM\n9NBH\r\n=JAuq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQJzaZOxTaLZPcPohxm/5k4SboTPCtIAYApPiafTzyRAIhAIPDlarMd526l4TyZWYwe2bD+Xpde6dL4yMfWlhHXY5s"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.2_1584048238859_0.43895027292532474"},"_hasShrinkwrap":false},"0.21.3-alpha.3":{"name":"@react-ssr/core","version":"0.21.3-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"be4a84b9de6322cff41b8f23bacd3e8eb5f6ca30","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-iga3jXwb57+vS5uc+31KJ6HUeYG+B4RMG0SOJrSxHUIXighG7YPnsT/1Sf+jLUV/La5vdbMQlHpUV7EDclUYPw==","shasum":"652398ca97c0d566cc0cf8ceb7674ecc7e2040b9","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.3.tgz","fileCount":42,"unpackedSize":515463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqk2CRA9TVsSAnZWagAAQCIP/0L6IuQ29XqMnzqWgPS0\ndo9Hq0YJKpkvmko0jG+/tUemDKoGcPU8mVAu5xPmp7hp7XgyJ8H4VMAsj6Vv\nRo0U56fdh8EWiP7cZxj5rG71VUAnG4NhLZZ7ibEn20OlROnGALHLII/LfhNZ\nNhTSu9ASO5C4gc8lrpIUCmuHjUI+YkhSCBBMQtu46JW6m80qpJU1bVrAQH+/\nl0HrgmV7Spty9s/4waqrlubawX9F4bbNSQWFJj5Sz8viPWaJaQ22aYpy3W6M\nv9S9A543CFlc7lWBCaVn+/jSkdzrqrNXqBz2joqOjMnDDMojI3p1vExRR31Q\nC7ElBuSFDagY68X02YI8jQ7xiU6e6ihGiyCDRbOer0EF/Ig7qPmeWIO6o06w\nv8szGL/JJolzIowQCgiTsJGeORQApp5c2MZ96/EWhqM2tNtk/2MJN7+myMEg\naI3SMjdSYTXnxixBFv2EUHdoYoMYtflqnfnlpUPWze0/RdqRfBIDvLe4Fl5l\nDgtCD/6XMd+dnQlPj2ISt1t0+zqOKH8i1xux9j633oZW4BcgkOgewaXJHFqa\nSA5OnPokNYeO7HPkFkZkksrPh5HTnLQU5To68R38rfZ80kaFOMR0ggbhjPvi\nF2aJfeSx6R10zm0hF4d5SjLDHahGzInlmCrzRMW02K9e4GpfccnQne9UZHzz\nSv5a\r\n=+oM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx3PlcgrXfbOHUAbYLGIweWm/We/wKSriHoJyP+kw3tgIgWmaPLHb25hZn9sRZzqDFq5aRcqWqvt/b0RK7rk3H/eo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.3_1584048437518_0.8791836265748423"},"_hasShrinkwrap":false},"0.21.3-alpha.4":{"name":"@react-ssr/core","version":"0.21.3-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"64d2dbc1d43be4522f6827ad3d4377f404bd3a5f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-MdhlC8QxubxNYaS0G+VIui/r1giXhME3CLWenay8VgvschXqqRKLR2E24Dy+2ibmnI1qZZxHpjURyDY9N9rT1g==","shasum":"3ed38247c472f5596351c2e78499a6ee54b7ac07","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.4.tgz","fileCount":42,"unpackedSize":515626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqqNCRA9TVsSAnZWagAATn4QAJpEdm8N1u2XrzHOUKf9\nTfNS4yAII8ApksGbbGWJMg83AIeYldO5afY3agYGrFY8K5qVS2Yc07cZtl+6\nDFzrQbDBsOXS+/uWssNg8ID6E48QNOrJxZmvDR6Gd4C2nj0Ozf4qFABTRz40\njq6K9ZCbkd6W0E+OzeF83l5if+FMveDh7PFZqep2M+G+iFcHwLnbkaf6n9ig\naxk8OpsUUVZwqvncTnW2gHA/eFPaGE+miZN6uVPVuR/4V+nJ8ruBriIohHkG\n2Km4ByI3e6FYWzhyeKNg5l/RYoVdM3PWANF87BVEDPOR7YBaFtwK7iFS0lS4\npK/qr/D9nSxwu9Qtp8MeNakLb42MkwWZWiXl+FPmDeRT9QRQZeZ/jPxytqjK\nU2sJXZPVu1H7Cr2cv+c+vNSq42rpKA5CiUcs9EUskCMkKY8mOecaAAayxUQe\nVgygfZK1URmbwrNN8TGOxlVU7jydKm6fRbsIHEIzCCW8pUE+IC6uF94Uffit\nA0+4mpSyTCXmz24L2kWha6efvG0jSUER2yks/azECCat0PC27idhqfN1JZsw\n6Cfv2XL2K1Uf7eBhLRGGncbk1DfF0KZ4RX4nBElAmB2+zDaM2nvH1v56HX2x\nZd6PRNuXSW2pUjkxUzOSxxkiTHM9eonhTqnKaKS7aYr439EiHG5l8Hl2BqyH\n3eeC\r\n=8jph\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9/Tlzphr8VHlHKspWUqAfUvhzzvWpAUq9BOQaMrqDAAiEAk/B8Xja7MDmnm46H1eW0nJcH+GRtFWsw/Jx43CBVW88="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.4_1584048780805_0.5341237621464541"},"_hasShrinkwrap":false},"0.21.3-alpha.5":{"name":"@react-ssr/core","version":"0.21.3-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"df8b57937b45c783de2e5e11bcb190b842f405f8","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-ueQ8DHUUTMjOBRGavPBps4XjllpRYoSLOxSGIsROcyJHs5Vsw/3iqrSVHz0HwFiCkaD7LkUZIcLmfpkxNPrAQw==","shasum":"6cc4080c43b752c845c4bdb95bbef8e4e3981b74","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.5.tgz","fileCount":42,"unpackedSize":515788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqteCRA9TVsSAnZWagAAsTYP/3QkcgwTtek/3swmu6kz\npwhPSNyGSE6+XHToVxR/mt+j37HB66j76DLLBv97mFvXH6v2Cz9c8shyBe27\nyU5XpCn2MD6H+JNIbxbbKQXp6l/h0X7X2/8Ud0OKx8lWFR248xCdMA3mGuEO\nsDoFM4Mnar1vcYrSghG1EHue3HABv29uOsDGkpuythMENlWMVMfRFvk+Aggb\nChwBthI+vJgjj5xQiKOHCxpofJ/9kJoOrkxq0sQy+kxd0icr2xc1pXz0MkaB\n2LvI8bLKUwORRlr8Akaxy37j30ngzdhaOyviNRDCGhNBCN+8NRrq4ViLzlcL\nFbqmoRo4+r583B+3aX/MlmMCjy6y6dRv+Wb40DIZYGCsUjBSTm36NNSAQLnz\n6mbaS/qBQlaqyK2HXASU2k8/oytqcT3ckWxG3PQmIe7OU/DgKCnuq4oyHuRG\ngd8j8Bdt+1KYu1wfY8gdendLkKPTor+kXe+pQNZnTjP1jC57KjW+xHqUfcU9\ntnHjWrYwGiDdRqUHViB0wXJEUUl7oWslACSk43WEeY8ce9GoHC5hNl6iGoBN\nXE/PjOg1zZyundq1Si+v/XUc0O1KGzkMTThhQRv2XttJ6lmTnbcZzbufmKRR\nzqXpAvs4dsuUAVVew0JD8l+oQ0c1o/LmhQROvmO+1vO7bgdApoadKsqQ7oYt\nGJW/\r\n=+gYW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoKrpTscKZ8emrmdMuUpDld7ALtuYUWL+k/GDDnUBQ/wIgcUf0FVzhtEUrpw7RliwlMPuT10QKum8IaFxl/0l4Tqo="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.5_1584048989566_0.10759639582050462"},"_hasShrinkwrap":false},"0.21.3-alpha.6":{"name":"@react-ssr/core","version":"0.21.3-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7f35c36b39b29ea8596613399971aaf7b39b31fb","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.6","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-JvnfIk7gkLAOQ3G/XfZOOmpc8lnokZUDuwxnjKWJLgJmdnb0wmCad4zW0qL3kXnonLHxyjZvxoWjCOtiimKITQ==","shasum":"c16c0eaee5610d76da03b80c5a4108bff50a923f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.6.tgz","fileCount":42,"unpackedSize":515738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqvdCRA9TVsSAnZWagAAwQIP/id0L29k1fUqQ1G1EJ3i\nFVm2eYtQLMw1Uw/JLb4SEq3qDxqQfWKcMqu6VagKfoeZSFUqgFrsecXybN5D\n8e0IWarbDLlf/GL+VWHsywJw0QF7SDgVpINTIiIJY8lWdh6ty9bmro8HNgPY\nOXq2Q7ToK8pKzlXdLFA6+ruWm3p3lS8oZMLvzzNy0qcQonn/aS3G1lDqsMA5\npuzcJsbpbYJW/ofKeIQrMlDbt87AwgUlMX1YEoYE1Dq42JPqlFXGi5A7lfuT\nQnJGJT/wk6qt7usQa0VVUygGvQLfYlo36Jqk+qcK1r/HIlYdMiTQrFwO+DMm\nW/ezJKfW29v04lrs2gqnhrwUpBHCJaXVk3AWwO5/o9A7WfXXlnbnSNLu+WnT\nH7d4UeKkLVGwnoQMSu3xhV8iwv98dnvZYg0dpPquCmORU23frBIl1JDdKdLI\nWO3IHxS/0m5zsmcyTgTBM15RCI3jkmNpZBGis5VqqpDSnx9cNrHlVDD+qN2r\nTSgAgiTaHHGTG3CEpO6Fiup6aPykoVKDk2u5SjB4N/b/I93XrwcSynkGeEO5\negAsiy4frNPVkm4FE/1xnxhM0ZAUbXGZxKNOYdsKsc7++M0m/qCm8NUGowJe\nM0jwROsukgmXLGNURyoUaEwjs8UTffFiEVSWX2kYPk/IvFdhZFPyHAdhWJpc\nOExY\r\n=N34q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW6WMCbulRTM7O+ugPHu6yjB3/twIS0USP3w0LeIrw/QIgHNNr9qRdKR8rKgFUeB2fipIX0fDGdbP9VGMH8IJygy8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.6_1584049116795_0.7625436349324426"},"_hasShrinkwrap":false},"0.21.3-alpha.7":{"name":"@react-ssr/core","version":"0.21.3-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b36c02204fc380e10ebd8c0a60ee7394009efd44","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.3-alpha.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-TfTSUiOcNXYUXcEox1PeMumVdcUOmXWZAvKixQNNnrdVgAdJcxbRZ1kT/0QiPx8tPRrLoCyfZukeLsJJA7gZBQ==","shasum":"11e6cb2d3a76f04b1f028c46b2f126a303afa763","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3-alpha.7.tgz","fileCount":42,"unpackedSize":515179,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqx0CRA9TVsSAnZWagAA+rsP/AkDxL3GIoXhgm8X7s4/\nI/KRN0VDfmHAIyuniyZ8T7C2cU6FYQNusZDDuLbLNQzY8WlbJI6Vmgcc6VYU\ncVQ0+NGaQ7Y18h71/m4kOpd8yYU0ixxEUWFhp8x3fXe6xfMlbvNQhNx4cr4M\n3NsTK9mYSr5C7QMwr5HgzTMjbPv1QlmVy1FmLklXO95LfiUPYlbIqEHueoU5\nBdIruSWycljUQJnlfFKdq0QtcbrZSnTcMgkVPb3iRBsQYWiVh6X7MMMm0UQG\nx0VtV0VdUxsLKEUYhZqsjJ2Yn2IApygaLNVAmVt/rWX8/KnJSlDkFosry7QM\n2gyyc2t3R10YLvt+CIs/yoHJstuVCzppextiC3itF6SIrWfMBGkn27ehTu9c\nbayoKB6hcm80aRXdsy3AooLUQ0lTJnDXwWRbO0W1wDXs34AOyjwR+NVeeVgP\nnIcopzD8tjfuPjk4+O0jZrhd5u32paHpPu36bPY8yQbw8J6OhqVOLohikJjW\nL6koI+wWFGX2w5QUwfSixSjcJVJDpt9Fc76be0ZZZ9Z0fktYZ+yBSdx2+tsZ\nw/7peK0aZyFcY8SPkCUPB+E4CpwClLRuKEzwMndGf2LzPx+qyPc7yvTlrvzZ\nfrCFLPLLm+X0Z8tkL7G2NxeJw1RpJtVohlA32STKSrIgEizIPOqI1XVJm8aJ\ndUl9\r\n=p0w3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfDNklXY1KjvZMyxFUEHyFHSVaJ8FqAvSATP21jvD3xAiBOlcQMsl29GLuuHTBjeZKAqAoIFyhQYIXd3uU9WV6j0Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3-alpha.7_1584049268004_0.3366625478679697"},"_hasShrinkwrap":false},"0.21.3":{"name":"@react-ssr/core","version":"0.21.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"49ef54e33f0c2954cfbde2187defe5e1261b744e","_id":"@react-ssr/core@0.21.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-dO9aDYOr4Lfgv2xZ71xxqPT/NZH7sWAX29RLKeSh0z2HRVqoh9Rs2Sn1pOAmaAJrIjcXQB0WWAOhNquvePiC3Q==","shasum":"3cb5070e9fa37069ac79158e621f4e204956fc1f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.3.tgz","fileCount":42,"unpackedSize":515163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaqz+CRA9TVsSAnZWagAAl3oP/0lz7rWybyt2Z3Ahj08E\nI0TSx/i0BxFMBHV6V/XyyRtyzvjEThSJ8ndQEx/usJy6vzQABhBRZ825IMl6\nqtFGgJe5d2UtrXxFSpjretBOoHZ4bt/UkfD2WDdChVMa+C83mf/pBzcj7cII\nNiOeDsX53j0lcBbVC8Fg+61XsBQ/+6DgJQUbGgAJZA3loMu/JEUaZf3NMXLr\nMRSjdIn+ZXerKIYpWBnFuNlMubkTOCwFtCBn5sX7YKXEJqHjfEpISSUZO3Rg\n6HokEg3o2yQfrD0szHYOHhDYgrEwG/PAChNnVAeYKeWLwLfw+QcY10MdWHbu\nIY9W2bfxbNsFvRZkmW3NqHSnkRXk2MpHpiqr4pZ99PtPLUXjVrcfOg0iHks+\nCIs3LjLNeLbGUjR7fHRfU4jhj6lJV5IJTX2+ePDcyRBpTZOqG27FWfy9VrRF\n3DCKARI3QNjPar4WTjkRQn4UlLEf2J90XqyLYgODGAGrfgMxhg15W1NKbzNe\nOdprdFWXZl5jqt+qX9GBAYAUZMOWBhTYKia3UfT6PUcn4CnH6y1x4l16PtS8\nXR886X2BTBDkyfKW1djccDNtzCtzRH7kTBwWlvBfm+jnstp+m0g3i8VoUhxI\ne/u35QqJ/P9Iz0csVOCTt2IGnpUUcBWTT+bpndg2H+7pxNUQsgUUDyiG9qgL\nwN/p\r\n=hz7a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAaTu7gxpz3DFRGCgmspjdUl7/xIhjHfce3bbd7OvLBMAiAt8shDKYZ6nFJ8LN7L2AbjPc4dKuktOUzMFZq2m3ISZg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.3_1584049406015_0.4689778850912485"},"_hasShrinkwrap":false},"0.21.4-alpha.3":{"name":"@react-ssr/core","version":"0.21.4-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"af8e47eacb6365014c7aa933ed93a8b9a7dded31","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.4-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-IqJUeUGnhOfuzSaa8ivgkxPu6goeQlUPkDUWgo32r33TsYuKVVHWEU99n9yQP9RpEH7ujzQWtCgf8SNxPFtP9w==","shasum":"45a66867fff5e77747a793bfbb811fedf4639890","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.4-alpha.3.tgz","fileCount":42,"unpackedSize":515903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8NzCRA9TVsSAnZWagAAhLEP/jc1fwXjdTT2wEvKA7Ji\nQww+2MHAtB65+O3m6GuZYZbUiUcQ0ernBDF6OxOGQPa8i0OfaWCKSirfdmlU\nZDK9zMwZ0u6bj1sPdskHuVRwI4S23wi0S0VnvYKDOJ9v8gGo+cjgJCQPiQYn\nJSe7BNKb1dCB8B4TXdTBppkW1iHySIHZTM7VFkjhLQN34rc+6Tegkndyj6Zb\ny3RASxOZiXzyYTunNWGw0tkuPK9fnnVUp2YvGzB+0f4b8b9fwUTKFwgt6sbb\n0FqT8LyRJt5ZYJHfmREHQDgDZuB/z/2unZ54RtI8FXfGsdYONZl08GZKOJS3\nBPbPJB7uu5Ap0nXFB9ZA2MHtgVG8jfq5r9xR2KH1TfSBuZ67q4ZgWQDBYYy7\n5RXcHmeK/ZvZOg7jQ1vTE5thoXpzxzz7wL3cuIUrTvrf2Lb9rBDMHjVRgH71\nmByIHI1TMOBkt03rmC9NfuQMN1q5XjAl+pMi3mdky0BYVv4HBEL7Hd3uf+ui\nyntzHz0kO+CvSXpxLSo7m9G1BepZR9U4OGBUGhIY2LfhZcP1FUK9yLm7GC9d\nrghzAuZdpLpgW87EOz4W67OFZbBjpdI9byBOir6CrxiCIPH/G9eLxOHCIj1B\nPu05KYuKA20VuXU/NeNoNchZw4QeccG/YJn8auY47wXjb78MPwUlnA/Jx7Hc\n6T4O\r\n=SbSN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA30i2GTu4wD4UnjcKulufOQ7GqudmwV/4YRsERfHzamAiBeiM2RVJSk7Qlj2VrcqSiiQIc9KGBI1vS830P++B5i8Q=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.4-alpha.3_1584120690726_0.7706255370756441"},"_hasShrinkwrap":false},"0.21.4-alpha.4":{"name":"@react-ssr/core","version":"0.21.4-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6ace760dc99fe801acf633e78d913f2e5af4ab78","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.4-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-eX0TtW+a52h9W85nMFVqCTqEsjj6n+ZNbAj9y+sezYRFZweKKsb2UutcAE3+mWGiAM3q/QMI7d1sQwrUuqBlfA==","shasum":"deacc6a499f1bf6a081a7687860504722fff549f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.4-alpha.4.tgz","fileCount":42,"unpackedSize":515899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8PNCRA9TVsSAnZWagAA4H0P/A1ot47FAV5DnDCGZwG1\noZRG2TbC4t+iDUsRtr8BwI2TZXwpB+rS3Ikj2QHOOXxBAdRr1TWwOC1SlffO\nhz8c1vwP2Ii9uqzEvjt8lYNTiolxMtNVEQH0Z3Epj9BYUEQILwxlUSpzMe7g\n5Ima6hJzGFy/RVdBXXze5T3Gj49KVrNAEJhRtJIqtdgmmEROemtFtIbbS27U\nNaPUiUuauo7DawT+73pb9gHfCN73bsVfbWjXjf95jwl+Ctg37SSah7NkuoO1\njJ2bD5Dsx2c0vUDEmqbJOsidLh8hwFWNbkuk4g2o6bPVzR8x07o2M+JRb25q\nCVtwaJr1+myKF9Qz6vTmMOq8+V8BLdlvpoEn0g01WR/dUCnhHOa2UnUVqrCA\nCvrGXLzTvRUzDXkXIGHNR1Z59ZBcgoAlcW9aYB0w+Sem7thKI0/An4W9gg/k\ncTG3+y80FPse408TdPNi6rlGzCLrxZaYsi74C9dtpbgi04lkwl5opuV7xq3N\np68AykMN+oZkzpZT6KD/3RKNjDe9IQRX7BSOPy8blXQqFV0EgZqGf0QEphYN\n8uJCCcCtgzQASYKUOhLiIq4i5Rlh+Snud71LGHfQgMifKFDF2ry9Gy+pRh1g\ns1bbDY6BCIr+Q61FrBxNYZFlntkVf5dthh/GCGOnZPV4r4pxOjhOryF9BjHc\nM61z\r\n=Nc19\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtbU9GdH67ozLtDmsXpXm/fZkJgu+7W1nrrsCJc0IUeQIgEne2Pg2Xrzq5BJJ7PyfLAVlM7TOCGOxAbIojz9D9MD0="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.4-alpha.4_1584120780496_0.4962858877730021"},"_hasShrinkwrap":false},"0.21.4":{"name":"@react-ssr/core","version":"0.21.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"73315b302e5f5cd9ba1ca1583d177755802aafc8","_id":"@react-ssr/core@0.21.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-71v/EO9YpFnaXmraPRvib5oLyff9YXYzfMFmjtcYc0Jt0UqgLwmckp1r0lVgek+3mCNMBW6e9drTuLXil0u2iA==","shasum":"91f853b61106c1ef473a42ff3a14b872fb81fc37","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.4.tgz","fileCount":42,"unpackedSize":515883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8SdCRA9TVsSAnZWagAAN2UQAIJy7qAgcuwpbQ8wRmnA\nTaRctTcEutY2+eiaOEn1VgDUQ9KOzfvjYkENy85WRHOisDKLo1hrNchbFmyI\nwP6L3FPR7aZ9t2DNiNNb7HtYpsVWLHAx6sZqXjAfzhcCrZI2LMWH+Wr0pucq\nG/cOt5wwze7JKZy6Ih7me1nP+s5xzHrU/Of2rxe0ZVt30F0J2/9ENhNUsVq8\nDRFLHOzDJAxiREl+ektI0h8M8ytC7o+eq8DUwoiPJjxoQZUJzQEMy62+nyBu\n+f7BlmUXzghlCXwB1B1J8GsrS+JURBEVqweg2R36Vx6ZnMtG0tWXNvzAVBcM\nhxIvXbAAReazuIWsK1Vx8uavDYoMzq633+Cx+MnTMiZjFnhIHRh8BVmoNFwo\nbsDvQU0+SGH0GiI9iA3SdyZYhRbiDZFw0eF/QvrvJXZoQd1dwpHYpIsx4QzO\nzdFYcEIAxvmp/ZR/Ri/SBh0uUarBeV3iLdV/Q+5dtEsyk4HhDh2mF40u3FEK\nUA/j5tU98/wAIitcxc8ia/iOE8hOhW2NHoMgl4PwuVU9/6Qr7bz1okK65wf5\nBNwT1o5BvCPyGnsctD8YDQikRAPcgC1i3x4Bna2AhhIdYGCiO0mp0rWjGfkb\nFGvOX0iywmqhIPdhGl2LPmU0U1Hwg8s2TtI96PKsIWe4O4SxQiB5uxNE7+6B\nFoMh\r\n=nlDB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw+gFNZrWY9acfYlvT9jQ6HWbRrbywPXXBni4EpExtNgIgB1lXLzaQbMINqGOlvFyijMPkCjbjDaGfkV3P0AZo2mw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.4_1584120988515_0.3621829600014572"},"_hasShrinkwrap":false},"0.21.5-alpha.0":{"name":"@react-ssr/core","version":"0.21.5-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f0f495221c01f018252a8a00789eac7f47ec2edd","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-/pW3aIbApGE7jH1JJu92Cs1/58M1CPGAhCPgIwU/YOXU4P/8g9nMLcR1ioyRXutc+0eJu1sO5jYV3ok/GvRLWQ==","shasum":"203274f1b5c6359e7a3f94fdc5186d33f39d99cc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.0.tgz","fileCount":42,"unpackedSize":515932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8b8CRA9TVsSAnZWagAAw20P/2ZkMLTl2xS+0ZfSdKBM\nirpLttG5UpLK3N7ugsVRXMl5Cd8mxuqV1CQ5UvGx6L3JtxxkXybEaqcRQjUh\n2Q8yIrTcASdWo6qQGRjmNdsjCwJDGI1SSSDGVpUdoM1EYYQ8NjnRpjFM+ZQw\nfNvatuaWLobMhEkCDGds4BbFeAU3v6WiW9ugRv2O4uzwJUHtqLRFhlblZHSE\n+1OClS+ZryXyMy6NdiMjamZGotOQjDeZeqCmIaZqrm46ITlURFBXSVDYknjC\nXmda6teT8RtsgcbPhHbbhOL/PLpTzJx+Qx5LT1tPf/21tjdCFhgBUZ97HxoB\nkpZ3Mu7GQnB3cwxIblx/TvfTIEyO3ow5hdXJhbePKWJsBgFLqHeVEzTymwic\nGpd0kQZSA1ZeKhMJkRLNhZnSrYMXFPhi+CE/9wLM8Qncu0DFmQYbpG7A1Ox/\ncxn35u43D+qYQ8li4YNP545maOvi0dYCyUHezHipyieC2nWuF5crFYcXC7OF\nPg4MLvxvjGawMQ/6lQZRpVdhLDEWKruu+bkVW5t2m6fBxa3sa+mrbbda+r0V\n4iSzqYccePTp1EgCpeO8aKY+dH7OWiJ2088S99//0aI+m9IL8D9xs6Q0T1Kx\nn+4TJR28DuqhD+bkADo07vD3QnRRZL3ZJ654HJehDWHWm429PoV8Yn2/meRy\nBxOd\r\n=/bN+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgPent4cVPEmSKw8C5EL3Z12N9H/r2ll2BKQsudHGLvwIgMzv+ZLCOuxkhsDG7Tjlo8FP7c2iGEVxK0MtE/fNBnCk="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.0_1584121596171_0.41344191495157134"},"_hasShrinkwrap":false},"0.21.5-alpha.1":{"name":"@react-ssr/core","version":"0.21.5-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4cd5e7abd820248699cb2458fa1ead79b6da1584","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-B7U5YWDKoVFomUJkGxGxroYLc9jm1ZFJA/SFk7xMPgeVbQlrz8SGW45whtjEc6D20m30Mgs5an5DwP7BWA3bzw==","shasum":"7fd920d1088818a928f609f3658bf28f3d629077","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.1.tgz","fileCount":42,"unpackedSize":516049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8jtCRA9TVsSAnZWagAArLUP+QBAqooeV67EbocILLvO\nbQhsLT+9rhzX2OD7KgPHlZi3+IEDWwVkMBb8XVPNVQg+k4M+F9lumgHTWLtI\nzzZGBHbAjL4wkyIVsBMIFYshJgJi3C/cLyumRN5WhE9qf0PeoUwtu5KLSSio\n86fZF8Y+xS57VgJMlmpy/qeQJsrSJJ+O144OtTeXNW6iJRaSPsi8rUQ5yi8l\n4TgCbazbUuVquKQBxYAJEAP4guo9lmuvXwikY+k8Db9bGX77Nupj9YvEcNMi\nZoS6Vf7hKlaLHy+buFce6NBUPEuLnolJtUPhJK13EVOdiHtKHIZAeWK73IBq\n+Y0I0IMVStDwBCr8C2S+iXLMCkZh8/yIbumnsE3cvh5J+dnQxTm+UX1ChGtQ\nIKnAPCIrUa1NLnA7NpwX4zo+ffc2z3lbrRCyyLgdTGbxShu38ZaSx8S4oRFD\nsr8t5dcY4VFYFdQjl7cjdF0auLB2/yk7g3HS43Fyao14T/q7l2wsxSDnfQsO\n3q80P4cIXmh6MT1w0d84JOqv7LmoFsSQSuHQMwwEk+DyeocJa0kGDVTXnEMA\nySzjX3wXhUR8TsN5h8IrqhAsZbSU7E9C4yStOOHT57ZHIqqRfMq95xXgY6pI\n0O1IeKe9Do86SYpKlZ1KJTR/4fvimdkBqCE8L1GmizsB4hBdJxgUWE2tJtzv\nn5v4\r\n=M7+r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH2t1wD5YLMrbBKG6jKih4b0eD6AQTvVY0+OuAP1D5eECIFXTtSGnNcxJpOlFozBUGYPH+hjUpZFE9dLhouueOZnP"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.1_1584122092474_0.29453001808577706"},"_hasShrinkwrap":false},"0.21.5-alpha.2":{"name":"@react-ssr/core","version":"0.21.5-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0d69e6e92e9f14e0139136380b15ceee31fe144b","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-4Tqgl8dRHi8OK7ONiDF/FdksHgLG87l1GM8fPX1rq5tW1YVw7W9htKSLMh5O7MZLmdWazMe8ux18qUY7+737Sg==","shasum":"c4131c802e55e8ebdee76a32f00cf6aa3408a0cf","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.2.tgz","fileCount":42,"unpackedSize":516019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8mpCRA9TVsSAnZWagAAUPsP/RtwsbbFvvRkZV5RIJG4\nj0HsLmyiLCX/Mhr3c0yG4YghU5ma6bbKBKqTF8ZR6u9/j2knxBihiN203tXH\nNBOmloljiUzpzlAx+wcCF2dygnEvWFsy/ToHeqbSXNYa560QdLoCqqN5UzQu\ngG80fx+3K//H5XLBJPZml+VHLSMstUs6m/kCEXhHPHDqwyHnNUSZCg5tNAYM\nvPZ2gwaEtFAWawTVdMGhqH+U8XhXSY7TqQhit4x8GBRPSpPlG0SUA+n23O9H\nu3poIE+SaSfmYoW7ubqLq1qXivpk+vzOlSzPRKs9rB0jcDppY+qgV8fJXLB6\nX+mpfxHWFSUiNovQh/zze4I1dnSAKOdaGYQbnXIaKPBOJ+6iEawMvU6RYb3Z\n1gFKpmKz0mrXCV3flN3J7hbFeAChz8P5n8g0Uye3rspQtQ+CV4jUPhQ9cMQZ\nS7wAafwLU2xrB8YF7VqK79FCb2+hY9mvt5p3bMGrkGjW+oLsO3GZWsqG9S4x\nO/bBrC+PvOZKnoRJ0d4fCNtAEqHv/7C2p3GonybpDn5QZNO3EEaxgZkCrIrc\nTbGYPGZnL4rYwceZ0fJ+HDwWh6yD5m0rJGtUT1VkudIlCKAchSOLKPXLLmXs\nn6/GVXqinrq/F2UN3SZLnY/DH6BfJzqoPaBgrwtVqKxUILa7kDjanwd8OCFV\nQr2b\r\n=jgCE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL3Hku62xacmmoWT49jNMfWIJxyD4dG1KvUmerGRxuygIgYwVV5rEPofDJhhKU6aR4V/s/r9tYl4Ji7xCOn3StibQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.2_1584122281262_0.6890034870688504"},"_hasShrinkwrap":false},"0.21.5-alpha.3":{"name":"@react-ssr/core","version":"0.21.5-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"18146d3f7d9a404492213bdaa0ec35a9dcc1d1ec","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-HOYvLubTP9PLrCSqOdgJhceYObY0SrixVri/7fXoM8jlHgPmytfmUo6Qb+Fvv7kgEWHPEGYV0pdcLOsgtIYe9A==","shasum":"95e919275f5a3392915ab6792fd3c8d5a3d702e8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.3.tgz","fileCount":42,"unpackedSize":516136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8p2CRA9TVsSAnZWagAA4jkP/3487/vpjodPdXQRJGi4\n8Cvjw5PgTK6vvIzlhRSoV12nuTeEASmfLcrd22LALEUe+F8TDrfCWF5qb4LX\ncmVNm5TjNDNQzRY1NBp081QgLEX74tF5He/ntq0mf17BFiGwkBaGK6otj9yA\nogTCzcFPRgiRkrvGoAOi2wgl0iLnu+GAulruj7cDLnASv1K6hPFOrh+i2ED+\nVz0/uEiZGEzD9/DMWi368QDC3dQ06fQXM/YQgCeO0g2aLq2oLC35iPMICy68\nWXYRjjW4nVz5xNJRRIN4+zLKypPxb6SBacic8JnKLmzXU1jfDR62v015MH5H\nWOMiAHtBs760YwACgw//xX312jlYEaGZGqKdDhpw+ZWc9k8rUbbPgDVgOWB6\n6CwNd5u9g91FPof63u2Bc8T6OydlJmpvGPeXIrBEyf3vzniwLcgixRyNYwbo\nLMtmlr+Pj/pkiX1xF3cJMh0KtIicK6zlnlCwEB1ud7xQh1Oe63BfuPE+L2nv\ndt48PVDKOlmDRWZvNMMTAYJnFMvrkPXrsgoMK+3nuGrYeYbFiV5XxpbFOvt6\nKQxbLNb4nnBwd1WKjzmheL1uLiuV8FVzmmvbOcnLZpa86defYYg3zBCBQbir\njx//eojxndZycIc/bcx+/eJYp1k4A9l+K8Y379KAELFowM2kTc31hTA+oSvA\nBzhp\r\n=3SWG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMfmGCjejcznIeExjjQOkkMY4U2DFtj3gMl3oZxahLZAiBKcVeWhvSwXCPbNQnxhykbV7KbMtoLvpWkmsLFjtwCFQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.3_1584122485929_0.23609180603454627"},"_hasShrinkwrap":false},"0.21.5-alpha.4":{"name":"@react-ssr/core","version":"0.21.5-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c7ca590f551c305683e4f62dc60077a4ef329803","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-h47mRN0URFBdqggZRVf4BuKvY+hTSOdo08lAnPT98dWb5Ue+iEcuhB+PbLScHa8RP5r5kbr2sYskcSUCZ35HJg==","shasum":"aef044ee4ea3e28847c6bb402e8e9710304690db","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.4.tgz","fileCount":42,"unpackedSize":516173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8ryCRA9TVsSAnZWagAAAAwP/383ErtAs0DxFj0Gs/LE\ncQkt0dg+Gn33WTa/nR8z1WYkhASGzMT5iP1ot0NQIj2xerBC6wYevSrqMOve\nVtxr4Zu8kMjclZRTO+24YdwNPoZXu37V1pjUXoMw/tqJ8l2oda+VO0o+jW4J\nCD5zSjgbRfigC5PA4OuFgrkxgEbL1jfovuoDkjbLmh/dW6tQ+c8eJ6MgYpwM\n6U5T8mtc1x2k2HjQrIKC4YJIRyXDBQmitMSoitwyq2x7X8PXo1/sczNN7r8a\nrpBmyBexAyybdQHdhh6znhAa/upLUverytnDmU9ClsDBg6VwpX0iB3FrhtsO\nVkiNKhevA8WGpCHS4a4kIW20SsWvFXgsMU2GlTLt5YQlhHpo2lWfNjCbo8s0\nZ4KWuPe6AIisZzy0ye3MmQCOzlkAyWpmLeFnRmfn2u4EKI+BqmcDTTYbmJvc\nd6yTjAZz3B4nXwbWzSwHyxoPglOmiaR0flKNti6bbsE9CuUgc+9v/CKqRa03\nHp86sIUD4eB+5fpaEwm+LQ/L3Swmf5fvpyA8qCIOORR68y2+Sndtg9e3hd0k\npjBWXU8FMa13KuZIvkuiUqBQWyQWbII3ft9CaxW5XIultrELA7Rso5uRy7hr\ndV+N3KuLl3Z5MNGNucncpqsV71ZmQ2OBGClHcZJuM6HUN/cjw4IscwmEnK72\nHATF\r\n=Eqgz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN06kydd4+tOWLvvA42ZKMCbN/Jd8fYky2aG8zVLcE9gIgWp2Qb7UfHvlItoYC+GN2mrky7ho+SnqK8qUyIy1TN8k="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.4_1584122609864_0.9346234809109264"},"_hasShrinkwrap":false},"0.21.5-alpha.5":{"name":"@react-ssr/core","version":"0.21.5-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4b5867a45430c75618219f1520b5623815904de1","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-lF2gf7AoEhqrzQPaztUnZnYhMXKBdUQZHG87/wTFOyhr5/SJyIVqHIpKntNt/bHnpL2ioBUbWHIz9mzre1Tn5g==","shasum":"2cc5622757c2c0dcb297c0c3f03e3eeeb0cfdadc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.5.tgz","fileCount":42,"unpackedSize":516159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8v9CRA9TVsSAnZWagAAE+cP/0QtGc+01jc5IsElt9U3\nh/zJlOXRqdhK6YfOxGadzQ9Dg6oEonpTN4Omt8BqVs/JcG1zba5Xb/VEbWiW\nVP+KIjk8GS+M8w3op08//7CoLleWQHCmkPXxSct95EccpIMYmAEthTUTJIrA\nTYtsGlWK2HzON/a4A5NS3SfOPb7PkLYEz1ujRbLz3I2Tn57qfkIdRyHv0N7K\n+32EAy3BE7tU6T+epUjl0Ggarl6mZZPjAah8PtE13qNBP5lHTCFbgyrlPo30\nSFfMvnp0jTN0fGTYUrgENxWf47ir90/vJ/JBYoI2OokUbjagP+GlVgKPIewE\nNS/buDZk1Zk3VOnLjvHkmo0sxCo7F5lDHqaAiJzzLP2+fHxuKEPcuWKmAkkT\ntrUDeP6K+DH8HlCKaGFp3iwqjW4ZvRDCEgCt48qAy1tg+2mCG65zC7/Lu8Xi\nA5SINEGNIRf62uWkb2kiLxc2qq90PFMia38Ph3uPImYuLuZRA/c71M3AmnA4\nRnLgWWcdiyzzMnBuzXeKxAWG3C7RxMholq0NQ+gVTzwYGUnJU20SIhJuaCEn\nz3lO7ZrIrcjUcARRqGVaaFIMgjBNUkBkO8Wsblj7UUDLVNJIg64Od5IVvuAy\n4jlyyK1OyYup9oA+CWHX/mSSkdtVGiYKSoNGFw8r9PyTdQ+X5xLIwJaPj/gi\nfJw1\r\n=WutD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1FcP5mW5A4hu71zvDQDDpiHuFp/vMsi7i6Yorx8gD+AIhAMdOKPtnXmupCimMqVdAnhmeYxujbJa0dyP3PE4/mQrs"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.5_1584122876807_0.9129444186205116"},"_hasShrinkwrap":false},"0.21.5-alpha.6":{"name":"@react-ssr/core","version":"0.21.5-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"56dad846be3d290303cc61246a5508e32bce8c9f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.6","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-il3pPUGizMaZrg+dZ7Yd9hR9C/ykQKhRFCJXMFTOK1tVeCTdy9j01O3WmajLSVrVa52oGfnD6ZpTFUTZsCTbmw==","shasum":"a0356c9f9bc6e266caffddebbe54bf3920be61e7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.6.tgz","fileCount":42,"unpackedSize":516211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea84ECRA9TVsSAnZWagAA1o0P/RMe0KO64txjwq+h5EUF\nN0qFSWEZxRtJViq9Gxwb10WvBuVAmZ488V/6zPHNQB9Cx0u3O6cGv6hoZFGH\nAAMZlk2AdjnRYl7+8fiUe2aCxTp2XzJj7bv83jzv/ZXn2uHDlHFt8tlIbQRh\nF4B2knEj8vSTN1LsxrvXf3+oEDfZ4FP5PO6M0u/1iznsUGauD3Ut3tu7PyVc\nB3uIJpabNg+4O70ZTBOJjdA+PZvdgyI7Ee1V98JetzCBkBZObBp0d7ierLsP\n7tuPdBrGv/4YlbJVapPQZENp0BeOGTn41/jnns/4or8ghZfolIFBi5M7eNlN\nz0S89pcRQf6Eb4nA0c8zn9112Qgjvd9urmJmPSDLt214F3381xliUZz6QD9L\nQDrtVrZdgMXH7+tPjI0y0M5FwMm1qCxawsiJXvUAbjCGjWflMPXAWNr8O1vU\nm/G49523C9lJZh36M5oHw36XATDN2mUz9AaHjOT7WaRXUaLYCGsVlt2NczXY\nyAI7tsA3yrX/QIZsuu8e98++pGjeWSm79+eNUM3a/epC3XTQooNK3kQBBpHT\nA5Ua/xN6k6B35KtLYzRCEpKEZZoj5RogtbX37xFK3XTMRFqQaZVtbA1brdEz\nRmGnXqxTSlLWs2lfI0AKempqEn4/qkBpRDjZ8f7TsGN2elUoFkEVkiPhLNYE\nyABT\r\n=WOER\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjsnKqWjrcJfdPj1kbl61zCNqFx4Rtb35syFPw0fUYDAiEA7lOFEayuLGXqVKYN1OJKamUGwzKraunm9wQap/Icfzw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.6_1584123395575_0.9408005344745594"},"_hasShrinkwrap":false},"0.21.5-alpha.7":{"name":"@react-ssr/core","version":"0.21.5-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f57ac1e1801bfd34a317247b04750c0d41707e79","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-NdT8u7GLgeetCUR1r5imFLS/CW/RGanNoKRN8KVf9tU3IZEnJmK/1xABYPXIVSV63dHoQkZ1CaHsFJ46TFPTsg==","shasum":"36fb50dd5e1105a0b682e96fdcfa1b4d71dd368e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.7.tgz","fileCount":42,"unpackedSize":515989,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea8/0CRA9TVsSAnZWagAAt0kP/iW1jtuvfaO/IjEyvvII\nRfYbH4vS9qW3QjB5rQ+TKYPpYJtiWdNN/SdkQspQHF7z0a9AOyMtBP+8Ywu1\nji3oin15yqJwT0wKE9Ry4yEdpJrIjF0eIFgQNE4p5jRYcPtg+yMCJ6JK3GZX\nLDHzaZUqwScAolhKrnqhNIZU/CC+/zIa5sHmOAH3qabG2ikXQKdzID9HN0E6\nl+acUWNBkKBN8rqkVDfusWEH+wfz+yOqb6zURK7OpkrFRJsgyp9wMqH23FKF\nK8VhLzDcV5aIc8xWr0n0tYrunstfQhVym4iAY7+quU0lJ6dN5RV8r0yfWW8U\nnfLqvXvMGPyhrMgPFDsanS4JexrTPpnYyA1mCVyv8s2vIIlDP5KyP7iYhJjx\nF3nWovkcyb2Q/YtRo2dgqc++fVd21gBTChhq8teHtOdHzB7QCnpE0GcwFMLU\nmObIxX33eaLJ/nzcVfJLabxss0kvmzAYopV1sMuK4/l4zIEeQ6j6EzUgbO2O\n8dkbqseIbAfD0sXGQpGj6gv+o+mOaAIHkGv+tk7oWDPYAe9fwbe04oXQ90JL\nCyGOghbWb7fucCnRooBSoBhuNZo6YblPwqFqX7+5mZJtJ9yCJ/lWT7Jtg/Ov\nXze16Ix5MvK1POq8lTE7CbodbT+zbMZn252yYr3vM5J7nru3OUQSlddx68fc\nrVUO\r\n=k7Er\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2XxYpC0F6flX+wOIepl7BJ6kzSv592X9tUQ6XDyAlsAiAx5uPyiHC+7HTW6oiHvyDmmgIzf7Yb6SfB4GOK/T0/mg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.7_1584123891863_0.8566038142482653"},"_hasShrinkwrap":false},"0.21.5-alpha.8":{"name":"@react-ssr/core","version":"0.21.5-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"5a3c32ebdb577f5dcb1e75d4a4dcfecd83130cdc","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.8","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-hjnCLRFe+xTYA3fYus+VT8eHrG/gzZa131QgCtlTvAZZakUcqbzqXkTMHuznHrlWyzez61YPabHba49VCuEt/w==","shasum":"80c077d2f38e794355323b3d5cba4e8e2842b339","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.8.tgz","fileCount":42,"unpackedSize":516077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9DACRA9TVsSAnZWagAAb+QP/i9BqyJeZVuojQyErjG5\nKGhH6KfsA5np6iR6dHWhTTOATrNb7a1TA4bMxaT62yBy/V7FQu/Qi44YMCqY\n6Jf4OJ9j79rYGjCvj0v1+915+ZRsexFsfsDV3l4ZHS2hJirj5668vbT1RKeH\n2N+FT96evttrtHMEuennW7GgCwIVw4oNkG9InrlfKhG6PSWAiWjkTHOb2rjH\nu1ECjq/ezCOSd5nu8/pm8NtIVHIWqUohE0GhZRzpdD3EISUJW6cnkZo0RbeV\nzyvmOpV2uSaZqLH/b0Kvgmj1J50Yol0LUF82RJn1aEhhlO915Cd/4g0k9h/M\n5eaCiouNPuuFYZDBrIgZZmFHZkCkqIU8CBEjOuepemq600sAlkw5jbp12lDl\nAK9hpB74Al8EWab4PHAj4vURygPeJvj6EWfyuDkhH3+c2A5BKxIRdsfmNv+i\nS69DDa2bERcVsVVJfRL69bRNWkANykPC90imgZG/oGyrVDzPaH5qJGMmCi0Z\n4NUfVg8C9Ja9c+dSd/QimQKX1H/obF7+z5/LW+Mzn3AUOXwtFrlXpuybLfyc\n+gXXkFWg+nZ1AbEzFsPjve2MdphsR6vzaHlHq/8ZO6+DkHmJKGTck6grp+xb\n/MBr2OFbFtFwEr9itHjtwEhkADo+vF4DpBhBCV6ezHqVAwhmaDvRiJddi9Pz\nkrXW\r\n=8bo+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoS1Yhea7Bn3kzsoMNojsb5VhR+y8OWtAO8LC1MaBRBAIhAMcJqXbSgsVWfepDtQEdotxVW1PBMaLhFeF4wvdWP5tO"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.8_1584124096011_0.3936460888536766"},"_hasShrinkwrap":false},"0.21.5-alpha.9":{"name":"@react-ssr/core","version":"0.21.5-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f70a3842e0eea80c59e03c8bf9d9475e5da88c48","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.9","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-o3NNGYogVP4/6HOEdJl0Cysj5bPCH5KrKMWBKcbI2u5rLOMacQwtIQRjGa5t3zjpfcnWNK6wD9/ioYL5PAqtIQ==","shasum":"49b2de7b997120f1c16cd2f2c6a94b7a23bc295b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.9.tgz","fileCount":42,"unpackedSize":516009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9IDCRA9TVsSAnZWagAAGyUP/3SWnQPnEScF6zAnmmUh\nxz4L2dAJgEaUPDdpLlrYaXpcYlRUb5Q6K5YzyuuM5UxPKAtyBwTaNt2fBvRn\nG8KXo74dU+TSe7fHbBvW1Q3eo+uw0CxMMRK7OqlmysXtjw1mzI0PG79mMpR/\nBDc0fIm9RePme/LP+q0BeY0SET444VOdEeaEgkJy78GOVvDrxOA7IhbvVFeW\nZQ/vqRm3VFpjs9voQPWi1Cb90H2zP90eBUPC+V6iw5eKDW/B6dwY3QuiMAvc\nv67VrNGbxeLHgt1uMsWQu0jzPAwlvq/bOqgQJNFmeogZqaG6HS5wFPZh6IZ4\nWCKcNW2TI4yJHQhkGC7qUgOaouy/Qh/pBNDJVftF8+SeZuGzEk19AtC1kZN2\npBv3cv8XeyO67ug45vRrCdfI82z4fXjmnq1PG/9LBPE/WlBUTh0YJUCBMYdQ\nhVGJOiCFYKgEPH7WN7dB/qNQWOd+7N4t7htury/ook54oiV1zsrKRDQVQKig\nKf7vBqZV1HZF8uLmApGCqUm/DHVSxnywVCeFXuDP87fKsGCkHUOigje1VWj9\n7oPX3i9Zwlu95R6vH2OM+452zDeXFGu4+EZwmoYiUdbc/qGy49axNA2iPiTT\noimqNxHSkI+QE46/vgzdWwN/6QW8Y7jzyTeTP5/98C3632Id3X2dVO6TBFPk\n/P54\r\n=BQ5V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxAmCpPTtLvzxlU54hTH/J8pmLtHIQGUgAOoVnR3JRoAiEAq9s5IicePrsIGnrqkOYdlV16tD6BFu11/LbGl9tXdx4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.9_1584124418608_0.875091488706228"},"_hasShrinkwrap":false},"0.21.5-alpha.10":{"name":"@react-ssr/core","version":"0.21.5-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7e46c0d6fe44242717c975eabecfe25ce0773cfc","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.10","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-KWB+pUUav5crOE/SOiBDeWtcS2lT0zoq9EEn3vcTAn+2B0TGWWy8FGTCbh2nizbdHSNPtmVZdirZdYgZd8leRQ==","shasum":"d9a118d103eb90cc4a30266c57c8af24274900d0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.10.tgz","fileCount":42,"unpackedSize":516095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9JxCRA9TVsSAnZWagAAZmYP/0+ZR4MaZzG07AKAod15\n5QpdN00TM+YdU+99Cav+a8R/vi5Azi6LA6te3WI3BqRxuop7Xswb4USfMkyL\nQwZCNCTEsPeviqWjGpYnNiIAdyBLRnaPzNTPHMRkXCS6v05JcOEz0MomVowj\n/AZQ+8z/OSFbE1OMdnbIfm2+cIX4XyPh7VNBBr2JY8hUkMeBdxSiLlWQAuXV\n0yEoPsWO0DrAIhNTlJectw3VM5ol9ye+r5JLzYSkUN9IWD6Bje73sDuKtRnv\nPUhgtrVy3smJ75PT8uT5NDYDGjrLRGN+DhiO5OquehyGMlTBjOAL4PXpXjzu\nEZUkFaIQoi2oBkpSUcfc+hv95tnj3nRiL2AwckSP/6Pd81CFprGM71zyCF8S\neNNmwgbcgOuAO5HDE7tDjYBcK+4t0p71ElzWeI7BLE6Wym6zxDAwqC4Ccwqo\nWukTfdu4MQSFIH/SOYRKxytNkaux58fFs2kP8yWluTqtPj62L4vEhJyFwL6L\n4zsIckQhJVOBtf+YWz60jMWFoQWNsrcTKcbQ8O3s6WWRhiAmB7QHPuO5WqZC\nlTTpxS1jG6i+4//3YGX26S0mc5tjSKYTUZEx2/3fMSepVvxdfE1LF7DuJblu\n3Nt7nBwYBDmypA3ewDI5POBAMEGTOA9cyCKYgy3thlMvtWaVXfyR3Nf+YLv3\num9p\r\n=NHeI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaT8WGc0DINBse+TZ9QOE5UOLlQRENpoB2zo722MA/CAiEA7Snhu3o5tiiWGWZ+Zf7LIvCJISqVlCypD0FFhD2iltc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.10_1584124528957_0.21270213991009657"},"_hasShrinkwrap":false},"0.21.5-alpha.11":{"name":"@react-ssr/core","version":"0.21.5-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"713b6a0811524bbcebeeaa408d42ba99c1756409","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.11","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-japKK4NQbKKE7J52LSMtk+03Hcq2FGfOeTYCZYcb2T3w8VIKYaJHtKN4H/d1XvsA+Bz2L/7wDmVR5fdGP8/YCg==","shasum":"63ea090d19f06cfc8623b0c6e61ca87b2dedfee5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.11.tgz","fileCount":42,"unpackedSize":516122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9NJCRA9TVsSAnZWagAAQbMQAJ2ldLFjce5nq0pgWrSm\ncLjqr8TAcNkYtTuPkZQVVogPL1voav3HsvnYo3dQTh2ftyiqs5zFbTyfdCr0\nhJVwoi9VELPjqOLEE5esD4PNtbw7bZEav0xoVeCRZIRcWz1/yfc5x5J4gI78\ncDDfcmVtFz7Yh85Mv2c6kai0sqFn6snJUl5dS6/qFneXK981+EexkoJQhzj/\nprqrb67sjB99qTI0LP7Vi/uafeYN5czcHRT7LOGI7H+1rYMA5B1pryVBuLgO\n4MB7knYxWZYRnL3zb8RiHSrG3O4h8Q4pOJL1Mc72UKwMUzxY2lUygy2TYQNt\nVbS3DgZIRfg486agFYKECMe4DBxbhRbB7uKaIfeAhJQqw1Qc0Bt00SukyFKZ\njRXJKQ35aJcBU6PmlF3wQlMofuk6fGNbPBk6qhhDsToy8P6h9plCw2Vmr98C\nO5FUYSPEW5ghwEGBUHfxgH3Lt8pmPov0iLFyVpGOLWVzOEJzCCYfwdfGNR9l\nV61qQrybY/z7S+JyYVJfStrIxPLcqCH4X5wci7Tt/AucDetV/KFdVLSQZxZN\niG2JforDL/DJv//oU5ktugdjn+wH3AUYEBoYS8SHZjqAQUILC17HVJxLBsCw\nHmy41SSp4eL2lHWcmrYDIck/F4NmibhNLmsX7R86IiuAbWD0i24rc6wBf7G/\nSCCA\r\n=VD2f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHLQftW7hBaaWdpFw7PSF7hGej0uTURxw4nTtFg4KtWgIgWfpdHIr4jkbvIZvFWRcz/vPeywchSZIQ76yUMxQol08="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.11_1584124744788_0.8186059218869306"},"_hasShrinkwrap":false},"0.21.5-alpha.12":{"name":"@react-ssr/core","version":"0.21.5-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"37b5434a7d0d680c8581e5a54fb322d668f6c2c8","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.12","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-9nQdm79eQ4ZjSBeBQUmJrP58felSaNboAFz0evfqv3cxBuiWDYAbSJ6i5RMQux5EiSs2VdiLtnseygh7xvHiBQ==","shasum":"9a581df0672333eb9737b00a3b3976fa7aee7e81","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.12.tgz","fileCount":42,"unpackedSize":515890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9QvCRA9TVsSAnZWagAARfsP/1NZ0h+WdPsMvTfWThqs\n2ki3fp+FcCogpKr+wk+aL/kXPoF1KPPN5OlxTDImQKuoSTuE5o8tP0rPtnUV\n0q0ly7VwT8Ce6D+1e2dT2/UUgjkaOSuQeJEO6Md5fVyW0nX7OlNSa5N5nZ+o\nvqp9xhRebQbHgK0EALTURIwDCnGgGvON2mq2KOFvtbYhafmT84jbGPUbcl5j\n/IcyiA4mRN2uGjGTrUNxlA1RfOvcVBHyLfK4pvwfni+7F78PR7bNzkmizOeM\nlrcIxgWnXdde5Hk6qQe5JazO22TVG1KNZ+pY7cwuoqgkJWmbuF/uoU2MjCUp\nJu1z+zzUqjPfHpORPy6RW0EvELQqPldD8PsVeLwAy2sYplf02jD/RKhiaj7z\nuk44fR9lfDiKBDbcsG5wLJPp0UnvPu9orFNexXeZS4Xm9BlobfrQiL+L68ja\nx7JSb0Z9+DB7czIta1ED+iomlFJW96LJ0mnvylskx75Z0JlBXQE3k/onmlRh\nZAL2VZSfBVxntuZyvC6AZIoztm8/LhzgJMrnx6r2+I6sy9FI/zBAvj7VIl1f\nO+GXheZnt3AbLJzBF0kzZ38Ff8Jt/bVcX8+Jhg/VZ/FeTQvhurRU+kaP/zYR\nTXQUREsTsydT+fdOf7Mq3n1xkegE2lD9QiMYMMVrn5JzO+dZrof+KmUk+9RR\nH8tR\r\n=adwu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYyJm6C5O05PhmSrq5BiVS1S7S8SBu4zhh8oqFPCLYhgIhAKV+QoEnhjVERN+1YojfZA+NotUJPdXNmQFmx/Tr3WLQ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.12_1584124974757_0.981607300876987"},"_hasShrinkwrap":false},"0.21.5-alpha.13":{"name":"@react-ssr/core","version":"0.21.5-alpha.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"346defe82c2d4618d04f9b416c181c20c8b2455c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.13","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Zr+uZTaGO/skNtqEkrMEB+yMz5nmVvagn3deciUnFujnlRuXF+nun3Hprsetyn8Gh8yPfl8DgmmdE72gG5ocrA==","shasum":"773f1976c65457a9bda8510ff1964d396b2c3c5a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.13.tgz","fileCount":42,"unpackedSize":516075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9TACRA9TVsSAnZWagAAEZsP/jsUNQ6PQzY4mz2Z5wIH\nQM2IFQ7/pIt8SRQGIL7Lffr/qv1du6ckPsLHYsJTi+aNVz8eJWtbtfZXq+9t\nxGS+ECKfnCylaE+QLIDQHwy4AyqR9NeegY/kJdAXHVuUFok6/DWHVW51G11C\n/VybB26WjKYPtBRnlPSchZqa9A3pKx+LdKTb4729LUZtDseeCEbeHqDNgzlT\n1aqI6G+pBgsd4N8scyTjCsAd0AgHUxOMvtzvw4fRm8RDcJwmlWM7ql1ddAEX\ncrbB7TmzsVD8PcRz3rpkLRWkv43R6ebgmJ45YPq6eLSH7K27yey0GEUJg4Dp\nbPTaR+1aCAsFnEEcMsDg8w8hwmGC2OAWMu7CtjwSDIiJFocZb2BEgjG7bgN5\nKYqRNPgflcQEMMJS4xYqI0TuAHnbmbHb3bQFm2zV5jFAhGQXFQwX2Kj8xhqg\nOZ7H5KmgOuEV4joYxHUaHbMHhi2hVMRdn3UOsLaySxq+M/SuUyMyAo4Jg0Gm\nAU2xmjz1MOKZAhuCejgOhsLpNgqzsrVMvZ8d1JleMLa5sJ3fkN6nS0YfLUMA\n7OgL/OYLLXPMplIGwn381vUu17S5PujMWsM22OBaBTkyyF54J3hplr8hTcAV\nuXugiyk9Tq6LK0UWxnEu2K3N1PMe9Cp+jZ1Ka1CN+yRCfI1CO2sC/MVNdcFe\nOtB5\r\n=bqU3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHz1dUVA+zkiUiUzZLvDN0MpksErpb5aQK0yYbyInyxgIhAJIv9quYVu7RXAZZYfGmESkh/fXtzvcbwHGxFFKMdHww"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.13_1584125120073_0.6575589970430165"},"_hasShrinkwrap":false},"0.21.5-alpha.14":{"name":"@react-ssr/core","version":"0.21.5-alpha.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f742f5db0b59bfea0c4f32ce8055f2626bfbaf96","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.14","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-8/hIdcS0/+cmpEWRavYayCiNUTP/FqtmSA/yRLXgvK97eFlg/pyTs/XcTx+Brb8EKVj58QIop34Z2ax3iRmHRw==","shasum":"02aae69ceee2e502941d05b78c17025fd7c6fe3e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.14.tgz","fileCount":42,"unpackedSize":516067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9U/CRA9TVsSAnZWagAAmSgP/01H/QnuKDuuKkDY4za2\nqKZs827ABjYUkUDT4L57WVfCJ2fsMguLUEj99tApRaldiU43DIpMbKOT+Ktc\nNcGrwGBKQpMbkw3ph3ZqmPMcc/quKY1agDd8cudUIj7M/PrQUwtd3//HJvWx\nddWndK/4Lq5s7eI2LgFtUooA+XAJwzTZh8saejjZZH0E4WBz+SDAV2juU18+\njZnrRvrEfsUu5NrZePJAQ51pVMe8y0/Yr06PbMMofursyod1QX54qo27Aef3\nmr7b2KIBb8an7DTXc3wzNJtMnCjXZT4dh1yj0IigCwGA1YQetMkUm8cVm2p4\nQ8iHIQI5MotVzNk6wAKSmCUGBFevQnmUDXQZBejeS1HjIy4IaVjAjFy5ovNs\niYAnaWNNwE/Y6hHr+pZZKQdcgCIG9RAoAj4swx4h/x/rFoKN+MV+wJThFFgy\n9ac+Iw7HDtlcULdaITwkJaFhDnkDxBIqnKyFSFRqd4WL6Rrdd8y5rlWsZP5o\n1Dt+bjpzUG8qHH+YenExDE587R3tPpsCXYsjm16uGzfrX44+HnbIHza2vaWv\nSt631cHEKLGYvgdGpG2h/q+UkJ5PMOKJYdB77irt0UIEiyIvGXK6sqGKvKT/\nbImH4MUkHmQRj4a/8dEhJRuWI/pcdamW8v4WXoCNx/N07KDYAbkzk38QQLtO\nST4k\r\n=JUdc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA0LiK2MjUPiQhZJgTSzGrCZ7v2nEtm45eBRZr7qk7xFAiA2WQZdvq8Rr1ZJp/R6YaL/5ZAP07xYzJOebZDiSvnnfg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.14_1584125247411_0.6772295788109892"},"_hasShrinkwrap":false},"0.21.5-alpha.15":{"name":"@react-ssr/core","version":"0.21.5-alpha.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"4515e29ba23540ee7be3b138d94fb1a2beb891a7","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.5-alpha.15","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-hoUuen1r99Byc6LoblMXRgknt20V123RavjnzjyzvGV7myl8ebjPdCREA4OlklSF+5Ms+0VJNlhYteho81tFsw==","shasum":"5ed5e8e902e5b193a342e0bd353eef52301e0a12","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5-alpha.15.tgz","fileCount":42,"unpackedSize":515393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9XaCRA9TVsSAnZWagAAH/UQAIsEEj6C7hLgbinj780A\n0wMKpYzKpzqvfP7gh6kr3x+MLBCAjyYUA+P6f4mLNG4zH3/vt9+wxplkaDE0\nh1TVgKETEIos4yuqzmclHKx/GQ4P0BMWLq7Yni1qeqlVV/HJqSgLH7E2qnTB\nDdTG+jvvhptybeo0gaYwwM497aJw1xZpTyTJ/T55hML92FkW8RPdneyC6TfC\nzIdMTIHjgcLAm3EaF1mqnd6PW2gxrvj3wcCk7ykshdnE2HlMMkNIYcHj7R9Q\nLIwRFoYHnhhWOMUOXgv8hKViWQDFkV0O1Al0neZ/WfFaLd/AjwF7fMoYMI63\ngQBFlfQB+SRwl6XmE48zxA6jy3na2YORuZucLYcZEDAJUhcrD7hK5xO67Qym\nuPupJymyO6Q0itiOrSVJaPfPk6zYWDl12f6mZONbCnpAhCg4juf5LSMOC7MS\nKUywR/QnEgFcP4iy0P3pmmN2bcFL6gvHjjHbEPSLqCtPeuUwKVDR2kPr+HY3\nG/Og+GsljfWTHs0OnCQ+YI9LzbIZxY3BLk3vRGk3l1HxUVXQXx5hTr9F1v+H\nWlqBD5L1oSy6mN4xfFAqKehiRBh0Ix7nfEgQ3E7SdoLiKBIOOprC37NDnn+y\njw1Rq//ud+KynXzIimkpw0ksoByyoovV/beKFWhr3/piPe+qLIoFiCNolsSx\nrbI9\r\n=a/rE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBo734W+HcjYk4hQOWqxHBXpTZx8oFmAXTT8miitYAb1AiEA1dv/zsn/3HNKarV4CaqUd7JkV8Lwa4waHklT4kfzVhE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5-alpha.15_1584125401807_0.22827117165571265"},"_hasShrinkwrap":false},"0.21.5":{"name":"@react-ssr/core","version":"0.21.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"05891c7b1899848affd79507a21d733ef68a5d65","_id":"@react-ssr/core@0.21.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Eiah3p3Ljjqenxp21vZpycm3BXWgZ6J9SajEYvNruvYK7cpgj5t6HWcCl7joa4l6dlpGWA68cUaN66VaehXz8A==","shasum":"39bc60746fadacd00ddd09d30c63a5627b231e66","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.5.tgz","fileCount":42,"unpackedSize":515376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea9a+CRA9TVsSAnZWagAAcowP/A0uZgXEPFbIth/JGbct\nn2y54V4RbUghHyl7Le456U7W63f6955yxDgCqOb5t2eDZZ8a4TOkFv1Debhl\nKVHKXpql7St7c9qFmw6iCgR+KGidV+Z2ksaGrszysq61NvoDPhgqdhcG///8\nZKco9vQsgq4VKipx24maOsKSpM3ZFEq/w07EqZezNiV0eM0MMrdZTBIlDiZE\nAfaPD59H0mc6N+AFLlAv/9NFyVOoqki2lMGL9jWtqippwuO/rxAAi6/xK329\nFgv6j/pgDNsIrecNcxk8DN+QmCX0adhGiftBTz9v+fevD2QQY86yekhrylzu\nSpZRgygHdPnD7j7spfX9dDw/WRK4G6xdLj7K8Ooe36qTgXj7ZbLexG74M3Eq\nwVWuflnRlOnfVwAx1gyjHmAnUxs9TcW9fObhBHnFMoMlGIlQOiVuK8u74fTL\nIlllqsjGYr7D7kd8yfOi/EgX+KFMqXT4mbh2E3EL6Vg4VTn13brY9x86b4yv\nuO/lI3etC8WdHf6Gk2k3sJFzS3B2OVMX0mZ8K9WJSRpa7SfZ1ub0K+sUXi9u\nvJ/WWDloNs482FGCgCFDK9oF1RBvLixNbXC4WBGPqLSk2Cpf2uHLQKswjcBP\napzCVEDCT9E6w08w3igwaSX0UubnocovCIq4U0e3oq51EUNd/UltzGMb0+Qo\nx9sF\r\n=YfUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvEi1S0t41BKS4fDZ7BXdwfHkfSq3NM9Ws/w5Y/VlaeQIhAKFCN6g9Wy5mTs7uxUJAPln6fWX+xRiJx8B8GGWbzlM+"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.5_1584125630033_0.6045502531684197"},"_hasShrinkwrap":false},"0.21.7-alpha.0":{"name":"@react-ssr/core","version":"0.21.7-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d04e9ab3d11672a72358daab18142089464c9ac7","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.7-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-IJUtch8QYm/xJEjFEcLjsyulW6Ws1TiBxVHXpWT0fDLk5ORCW7kHvYC6naUKBKxwbaSZ2M5ph7gQF/Limro8Jw==","shasum":"9d044db1c5c4adcb510f7b4287f8efd7244664d5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.7-alpha.0.tgz","fileCount":42,"unpackedSize":517207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJebdpgCRA9TVsSAnZWagAA2LsQAJG1wzlm5cAoq3mf7z7S\numD8iTsKpiBAKnUdTAb8LYMTOdu2BgNiZNHj2M/EgeWOWQ9Dzmj6tht6NHor\ny+5gRkIkFTXliDCbqdXX3ID+VPv+CQozCjkC/0kN7HnQO7xwYILh/bJGuhh+\nRz/58RbCg4GCL3Gg6pB1rvewdGMF0akWi6k5ic7Ut0SrvIyR5wg8RZEqhMwg\nR4et+Q4KG5d69A8zs7Zd+5RKoXhq+F2dZZduu7febBEATMl/Fxk6uG2JUvYU\n/ZYcTrMbndB2wxdrrtn+vc1KNyFJinRVxye7OW6j6MARvEcbuDaNkvcSRBEA\nLJDjftOK9knZAABiEq50p7fnnnLSUquP74up4mx21/lkMBX1QQQfX+Zuw9u2\nqIQkb1LFxYepQvwFK/V3HRQDHOTk9gWBtkcHM+S7R8ghlivwU1JTRm6CWvvy\nXI2C7UF44hFwU8/u+3GkdWUtMRRVYwk/hhDcVihFiBXoYrTN4ZeUlrjA6Usj\nATUAvfgqj3nVqm+0pFimahmGg+Y5qWrYd3wPMo9n58Ll963U+VknIUavM/H/\nmxtMRcwzZrYnJ6k66kYKN0aE1nE+GM7CpjADaq9HXSvi/UIQjD6A/u50MDDO\n5i2/jqJyYBajQYdpDjK6uNo5WVnxg92BDGhBGDpqxC+BzjrxD99R+3sW+7H5\najzN\r\n=5A8D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ134Z/ZztKLGFprkTkkoZBKubPxCBat8UrOEl/LA6OgIhAJsL9gRtzJLX0ujZiD3MxAs1lUADg1UOhDcmBKztUChS"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.7-alpha.0_1584257631882_0.8265775913746647"},"_hasShrinkwrap":false},"0.21.7-alpha.1":{"name":"@react-ssr/core","version":"0.21.7-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fa4ac72d13926763806b19630ff7b50077e2cfe9","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.7-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-g8ZwIjrcIdvfrVi7balDpps5a0TPVYaRK8tY3+slkNG3Y6cxM7el2q+udBGbQvSvTSfcNUZ6vD9IPE8NDdIYfA==","shasum":"fa1a42d91908f16e608536382711874c8fb112af","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.7-alpha.1.tgz","fileCount":42,"unpackedSize":517304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJebdrkCRA9TVsSAnZWagAAE04P/00AYldbG4oNsqGUDY6S\nXGGXLMZok5ir4CKNvm3Ps/BUGqTKTp/QdoNfbgaqE9olH7sMzxq4L2zuo1Yf\nFm6qumrrzChMAIvUfTItLhWvLaDYi0uNG41DaDQugYTTeWGmGhrlzDKL1TGP\nqfZBBkr2buQqu+XOQKsS1fbqlDEvgby0IXxk85CzIHeWVXROupPJJF1b8tpw\n4s0yAc6J1UtVVl1LMTsIc1JGYyH9IdvQOu/r4ePtWgKBI8uFpROW+VjAMOXD\nuuZDJrAiZBB789g7IIH3FL9JeoVT3ueBtqjDCAoYrBXkWi5YE6+EJPxN7rb2\nWWv6X+lzgtvzHoTtJQeJ00uQdrp5jqidZxI5o467Vwh01q32fhffebqsfM2x\nEfI/TiwKltJLpXSQjtW6l2BBiGluzn1NsJA7flBwJCat/ZgzwE8pM+GlI2va\n7Ol7fouIdwFdnLwB6UpjxbtPw9Mju0sQFuUI2YSGFRp4XYpQZdE+BwC9f/iN\n69l0XX6kukpJbMOQf6Sxmk9z9KKIU81y2TI95Yi6y45lfus/bbA6ErLbZbW2\nfqF2H3ExChCHzwKQmrWAhKNMG1SFDe6IGivXEqx8SpB+30PjT+lGCQKeA1dy\ne4qd4tISFbZxPdLgZ9TK2zQAqYHWLw6PcIiiRIb+/n1yMPXIWoHK3n2bdt+Y\nreee\r\n=n36h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD22YUNvLYq2MyhjLxxRz4v5YtdsgXMBtbCireQny0gEQIhAPAkH9EtRXboXYXnvTCPBDkQJHKwUvhWALrVqHnaKUlZ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.7-alpha.1_1584257763862_0.16000479865135286"},"_hasShrinkwrap":false},"0.21.7-alpha.2":{"name":"@react-ssr/core","version":"0.21.7-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.3.2","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"114659ec1d764069657f5ce09ba932e40a228bdd","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.7-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-c4DbLA91eMgk8oibHpcUMWYXHzXwucsukpve89McIsr1KPXzM61p7/jCkOek2z1ZY1bgDDR+ZWuBvC/ER8AC9A==","shasum":"515f1756de661cd23843ba964370466885eabfec","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.7-alpha.2.tgz","fileCount":42,"unpackedSize":517207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJebd2hCRA9TVsSAnZWagAA5bcP+gKnSob/EjrJSJ39bpxR\nEo8p8y8Vm02bxS4/8Y1nN9gUQfTsBSNWt/oMgE52deqKpd+i74sLE8nzoi6q\norGTaQ9NsdPz2Za2AyIbaGPNsg9EQLrFTCQjuk9IC8n1BIQBW4j87COnoKOv\n49nt1raQv7bXyKEQTEIWQ3XZFhST/kI2+Xp/n96kiIZhtQUJ6kHAUPDTDPfO\nPsA4bZn3AprENVOCxvAK42gbxHqOqgpe2lJ0PMdWXxEVNyoWrImLr08pbSkg\nbgHODr68O0V3BAvF1SQP+WERwvzMP3fbvF8knJPrSdyHD7UH+llOK+42Qc6v\ngv6i9zk77GzIaXIg4+Ro6KXefe8u3vxBR8NyKPdxLcElbimOfyUll5j1iqgL\nnLKgJgpehtRi2as0ZJtC/+Vf5vkgecYP5w2bW/+hVAp2DjGthOyPrve+VDg+\nJz6vTlxW+HhXu+pBmC9nTgicTfXMXqSlWCoyiWtaDQQbt3ike81hFekqSnPE\nh47UoVp1+xCQSngGk1m5eZ7yB96Sby7fG9sHwdQjeVpTflQXvfao6tz3q5cE\nY73V7pEZV5xW5Ml3HYD8BpM4FpObh6N5XADSAHfvTrE09uVhWuHTd1MB60Hl\nnhPGET45pdd6mCzeBJF6tBTAzFre8Fp60IzRa4tWMZ/2fSBu2g65zJTvG3hC\nZmPO\r\n=5hZS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDulWgGSCowSD0DBvG2f9eUa1Sj/qQXG3sB0/MRt3+txAiEA7jRIit1jMgBotHD25wRv018jK9+GoA656EfEwI4aQ+w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.7-alpha.2_1584258464963_0.8412509360885614"},"_hasShrinkwrap":false},"0.21.7":{"name":"@react-ssr/core","version":"0.21.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"dcca84e04e265f4be448d2c5e2ca654cc361eb91","_id":"@react-ssr/core@0.21.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-X4EkaRS5bESsAJ8SExZLqwpcPrvkF4E3+OQjn/wco0lduVHC8nFcYRyV350UwVelVGTlPIIKUERVfK2URVY42Q==","shasum":"2553cc997810d659fa3c883fa35b3c73b61fcefd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.7.tgz","fileCount":42,"unpackedSize":516936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJebeBWCRA9TVsSAnZWagAAM74P/ieBznGK3Q2VTOkKfD5l\nnSyetvuNW7jld5ff0PFKXRTSPij5GuOkdLnnchJs1ZwOQVkOr3tQg1poqjbM\ni3G7Mcyx8Joh4ZhSlN+0LW8x0kMXHdLfDNPW1aSzwW7xggoGoI70tCjxRrtt\nk3mh515gBY+abaFRqagD2dMhH3XzAF1x2LvCw8FVHmX0TpMj+GwMnQnztt/j\nSWcZTIEhH2KNzUfqcxc3EGg1tQMimoeUXAFSEBC74V/eJ/84QoNcIPnIYKrq\nkr9/Hmctk+TS7Wp9sHS1NX8VX1EWKbC9XDPfv818KzAZb0HgnmwleL8xlwzJ\ntsKVr2lnhE0X/3Gb3aH1V/3xfRctqiTUjweTxuk2dtUPJVoiyrCBB2nCwbSH\nT1D/mGyFU9z4CdDwCcxogbpunQ3wWFIP8rwYqWd4x4HcSJKzVEqjv6fl4mka\nuRN/rjzOROt2C1ymhqoIuUu0bA9UFm8Df0ULtcsej/wG/USxGWThiuHt9XFt\npsSDq1Tx//mEzFKduaA8aBs/76w1NhhVcRqjd9PaeucnWRfqF7sm+O1I5Pkb\nwn3/FnpP0JyTVB7wZdxxlS86oI80J8rVf05bKvK+/koT40mLFcAajYbdxkAw\nZScGsMbLA4Y/y+3i/B/iDh/kRfWUDdBMiBRNNI62NzFihzX6IVep+zcatUzc\ngWLb\r\n=X4is\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICB2p4zGu3qOLRtf5mUsSo/0rJHGUoIFNF9+iFQNscVkAiA1bqnhNOPIe+gj/U2zS8BkB0W1S+Y0E96PMyHWdsICyg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.7_1584259157706_0.6021943891485932"},"_hasShrinkwrap":false},"0.21.8-alpha.0":{"name":"@react-ssr/core","version":"0.21.8-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ba58d2e7b9004e8dcecc3d02aeed2815e804b750","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-JbsVLdYw6NgUkBxQ9+Kh43KkBam8mGMgfft8pavlz+nhLsLjIC2A/IxO8ooZvM9kiuLV7hnvvRm5Lhh+y6T7Uw==","shasum":"595ab91cb9daf5b9b46670d16a778dfa9fda051d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.0.tgz","fileCount":42,"unpackedSize":519928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0PNCRA9TVsSAnZWagAAMesP/2hLUmn99mdgXcBk3w76\nkDWV/yCBgaPdaSCn+nlofJxH/8nJ4rPNArWz/FeiWTlrFyh49AfAMpO7hyYa\n2FvVnoHyUi5ZB0vkMp0KKzXi+eB/5clmhGogZ1lNS9EHJIjY+qu/0NyYpow7\nQFY7ff2IfGBeGsNBEkAwIIdSi9HfvVcZrShntozHDTdZBogCIgYNPo+aEw51\neQBU0zrRCLfaWKwXHSdI2LEIKtiGDshaIUobRMPuHMyE5yQPLfnEl6asYhQG\nQxahReEgFn9GGvce5AsX5GQUwm2w07nBu2QMnkNPD59miyNNppAXCE79NYoX\n+Nqp1K+MtuSuAVnAI+bIn9Osubym0d4q1VWcRkjXHkXDmXxQS8A7fevApnqj\nLmSrWYdhPLZxfvoLkCmIA/8QcLTFACdbGn9qsZ7Ijc21fzrBvfyW1cQ7fId1\nO+V6CoMFjlOOz83+7DiQcUi10nZLOMm0uFg3OkQFhAt0vVYBFaLBSdNjGOI0\ntwd7Xojn9rWX9AMQpW0WxH6smxk3YISxf/dgxqvUh4FGnQ0pyzmOYUqorCuW\nxbFanWHP5PKfIHVjcKnQEK73hesAllR2EhMLa8jWjfsKaUCVxbiDPqAUI0zS\nbgYrA2BhVUPFn5LVFSYTYRFBBxoiZ90VwtijpLoI8Mnmgd3wCnR1Tyv5UU4z\nSQnk\r\n=TemO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEcq1QolOgUb2KjYD8Z0tDFW8tDovHZbE5GZiInivtUcAiEA0KEA1p11ak7AxHxoYL/RW1ESdlvDFrHWBjBxUpyNmWM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.0_1584612300992_0.1748094226445187"},"_hasShrinkwrap":false},"0.21.8-alpha.1":{"name":"@react-ssr/core","version":"0.21.8-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a7bec6ff056a876dfb518a80fb448d0687a9c47c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Aagb8Qw7KflYuck6UG5HBNhopJR//urd8BMAlpMoSVWx2DzDkiTtb7WMDIs68db6qvICaxFQMs9CnC/S0I+B0w==","shasum":"8c9575bf41e7b34112144b025583a662db6f1842","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.1.tgz","fileCount":42,"unpackedSize":519926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0SXCRA9TVsSAnZWagAA1LoP/RX3ySpRxH+8Q4Q/6G2p\nZXjFyLWpsoQFnRkpbifkttIMgW+u2DMz7xkmHVVqTZFCJPaYIAQ76bgA6VXA\nKV4EI9lNdvg7javrCOYmlybSUD8bC0SXe8qeyfV+QQkId17BQAYT1E7+lKWe\nbumVol3d4cyqHBokh8uS/+2rvuEziUP7w/YXXgJXS1aWkfq6JEIXViwk2Re7\nso1fbUxAYfzjYfr16kD84xYF3EJ5oXzQGyslcYDVASs6GuDkx1lrllo1b5pK\ns/dm2iUnr62qZk4SbFHDqafGXxRKretH/BANgVzfVTcHwfi+M/zpjfE4POtH\n4SmDlFOnnuDMQT025UUodZkiz1RN95ihQKH0iIHAnGtTeN/UyMzv29OgRkmg\n5+W9hyuHG0r3YTNOU6bWd6rZrRLf9VScYcOqUI0TownwnQ/V0dj0RrL6YbCs\nM0REHVLtJe9tUMOzjazs6ET7ah1X8+q3r3n7uBw5Xoj4tmmnfsUCBkW77HzO\nwh5PtB13Cb7HqjhQsZr4b9sv/D9AhXi8zn7eVPsXQ40tVhTPLImCWoNb44ib\nMfqwxB2c5CaXwNIzj/RuSD9Z7420usmUscuchJmnehg/2u9+ENIiuGHbA/4v\nie2R960FcelATWdT6TSEFsUQIUeh5pCZnEPpGXB1gaBUGrTXFhqRzhu0KMHN\nQ3Xv\r\n=/qMT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiZCSZwiUL7kQ1oH7i/bFtDfVxN71jKwOyBuJYLxepWwIgHqriS+8UNWS/xGZm0oPM6GZyTfdMb6rP3WU5NtA5dZw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.1_1584612503400_0.911621498388189"},"_hasShrinkwrap":false},"0.21.8-alpha.2":{"name":"@react-ssr/core","version":"0.21.8-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2ac6f8bae872fcb2845a997bdf849cb6408ddb6f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-MlIlOy1QDnPWF1hin5/BFg8DmUPZkaXg969nH2euqO6sdjqjySvhXTrakwx/AERuYz49YKR7DUFgvqzhbqmvqA==","shasum":"75f5d84071a302afa4f18c1c86727b2e46f4b17a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.2.tgz","fileCount":42,"unpackedSize":519874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0WeCRA9TVsSAnZWagAAkUwP/2Wr0i4oWdi5lGQ+loyQ\nNtgPwWtJef0cnk/AvYNnX+o0GNUp08ceHhOn+McMGOdIZaFXrd/SQo4n+Kql\nHlSk1xm5EcD+t5Ab1WY+y9Cw9FHUjWaDTpBXIQqL0O6NfpKFHvC9CxpbXxFl\nbBaVdypEYEu3vOpgicfdwc08qORwCPrA/VYFuOmbCxAfmdm32cwM4Njb5Xvf\nt2iJTijNcAy8HVqpW65jZNJTbaZR8RqCxo3yG69HNQx1NXl2HEWEStnagy61\n/hrGmbWh+cfbBt57qRLPBYeClr7U+3McfJjSkRLPRtC9nYXW71M8mXpHaKp1\nDD8E1xKJdpZCBKqCuniUKBQQicAXFI9VLISPlKCfi+Nrtdz3fHBpe+eK0hi7\nFtbHAv/MPdP1CPYF8qnXDIj/Lk+94Mv5rbMtLWuf66IurimmNHDhW+J45kG7\nBgy/uREhPnbxeiYMQTYUZOYad3kqZ4m98YCfOX7m2wkjvZXcz9fBrc1I5y72\nllUywXSkv/MSBUzG0xUxp/tTHWjc0InQ8INLZsLvrsX1sPwLY1OxQAe0RAej\nw3Oa6xdiNH8EgCIutcjbvRAP0+5PLfB3VbIr1O/DnokcvvBJ+DYVaJBKeokA\nDMEHB2UeVLbGiSxkwNV40dM0JfFgrxoEBQFzaAP8UGLwRdTubzyKT4t68mDf\n8DUX\r\n=74U0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjQPLmAYAlHObPl+gMhAuZS9DawZR6E+573IU/F/9QnAiBFn55kbij7tSg3NqZNU2Gue3TYr2nu0p5E1CAaHwh/8A=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.2_1584612765660_0.358889673485725"},"_hasShrinkwrap":false},"0.21.8-alpha.3":{"name":"@react-ssr/core","version":"0.21.8-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3ee50449a40717d159d52c1ae1fc8d7d391d59ab","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-SPrGAHELGMAPZguTxoihSKcIsRdg0k2Zm2aYWtG+RhJaV+8B/dcvtT84XlXF2jLxSnYeCU98WY4uT2KClq2kwQ==","shasum":"ca768114f65494d44bff6105759bf07850e32f7e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.3.tgz","fileCount":42,"unpackedSize":520004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0lYCRA9TVsSAnZWagAAOHEP/i/pKgUaHYHEQeB+Sax6\nQGKmRW0puVNW2gySgWelbCT9XVbNfBT8FBHn4qTgRO3msD4jHhbawUqDwJBx\nXbqUjdA7qJNUrNR6aWR0uO4fpHT99jXRyGJpv7oZdo552/QXSe5aFZZ2h8MK\niAd2LyB9o6qq2IDVlJj6wJl26WEWD6KZpPwA24xU2he/y2ybOF9/EjBFeFE3\nFu/5PcXCQEJmozselgv627avWOJ+8lgrrgJItQ9H8wTLIMxQURa0SkBU4I4M\nc8dAZFZMAG6D8X+rwpKTU3RGOdrSEy1eMSElHTToNRxqcuC8Mebkh98tM3RY\nMdsMRjnGJrG2NwOkTvLlR9aRldsyRDbxnIRTuvM7wmXgo9TOOyEYX51pGX/3\nWW5TmprjtY0svbkLnSNNjhkfGCQWmrd/tl9+Uiw8jFC61B7JGGNh7g01L9Lx\nPm982zb0ar3eZsQOOPII3UW5c1b2r6rI9yzjuHAd6771lsdkaS90bYlNd1X7\nOJkpi4QpA8HsQw6MBlomL8WYnK9zJ7NAcEhIkbgY6+eGAEQCks8uLvaHVFF5\nZungPNsUfvjmLJ/QWbN6gucbzGIZuicDrlXxMoz2yBkFaDKoLBhVDzg0O5sF\n7s7Pa+4yd7tDp/oN/DVDyG4ZZJzyNa47SAbxw7ut0+ufQT5bQkaF92BjIryx\nKJ2A\r\n=laFH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbE6BrnDm+g+6zRi6RgzXvmPk3gKIj4KDAES5nWcD3dgIgIdOJuDrSfY8OjNQAG97sfgr8OnaWX/AOTpuJ435qPpY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.3_1584613720013_0.7366816662481732"},"_hasShrinkwrap":false},"0.21.8-alpha.4":{"name":"@react-ssr/core","version":"0.21.8-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"93857a225dc7d888f9d8db2a41a214960b384e86","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-3zRnXBzJdkPDTSi0juzEFX6ksGnjVFB8vIF68wLfaBAtIy2O5bl866YSeOQ5DQKmj1N5BcrUQ0pOqMvriP+T6A==","shasum":"04085d7a0e7ab39ee3043e1ed8f848ab0bb5b904","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.4.tgz","fileCount":42,"unpackedSize":520024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0sFCRA9TVsSAnZWagAAa4oP/RUJpJikbOlU1LIZGpAf\nZfuMhT47iRV5r4wzTaADgqk09tVuh01YG4VZTJ0y5+BP+Qm45VuHEAr/JvaV\nAkTz2fk5xKNAoTcUkFS9sp1gqMcex18nefa5VU3cyuwznAmh/3/FKaHEGGz9\nt0a4rZBiTZAbJyHo1QNkPkua6oPDUYpohGEceGlpKcWOGN1r4mFc+GHR5pbR\n0LAFxoBC1AGmObDTcKY5iU8m8yUGWzFXvnaa5zNN91KxXGBnf1YpDvf+pxMq\nDjR0yOuyzAcNp5emqS4w7Z7QC0Wl3iY6T1jgdhXuXONx7p4MxL8QwzXVbi7J\nGTDRid9xhQY10WixoxBKH8/bKsO5wfGoKf8hO4T4cu88sLtFyhJZyYrnhPmm\nL0ar5xD3Gi3vdF8GmFmGTbpmTHxNBRAMlrT75TJLjPUJ2QcYHNBjmxPHLu+r\nmuswYdGmTSGm0g5EoMpWClCoV4gX/cWD2NflfeSJnpPO0yBK4fufTsYwGCtQ\nRpqkqcPnMtqtuFaOSZoe0T+pz5khh0HE1FLidbSUV5bAqU7tBvKWcFGG7d9e\n0fqEpvXCwzgK3p8tPPyRh1bfNSeYydcJoAm5EFlwn56PwqbmnQNF6bFgGxMw\nojBM8fgtOWjhPReImT8N/6bpMeKggRsUbirWhxYFqMjWFNLvGjgJ9WliZem/\nZrEp\r\n=1o/D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3yrhtchq32+bqvFkR4opuW5DIZeCsT7SB6CfWuSHsPwIgfEuVmNOUfDH0XdCXjcBxej5bVlm5yTdfwBTtlfGZOyA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.4_1584614149391_0.514423232402698"},"_hasShrinkwrap":false},"0.21.8-alpha.5":{"name":"@react-ssr/core","version":"0.21.8-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","quicklink":"^2.0.0-alpha","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^1.32.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-terser":"^5.2.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f4c628a6c48a767016de0cb019f831804a63569b","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.8-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-YK9eJXPHUu3CorIFcpPxEtwwXT1rvHylLoApE5pK5ZiFNuU+Fx2FH8SJn1FRZlATpRA4tnzZ5UYkRVKGWGQATQ==","shasum":"bfeb71d003bfe40c9426c94e68ac9979ff8a6dfe","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8-alpha.5.tgz","fileCount":42,"unpackedSize":519874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec0uyCRA9TVsSAnZWagAAWNYQAJc+DazlokpRMuh9j6KX\nFXhJr1pGuFxUqNl8rn2lY/CyZuae6LheqCwKQ/trFIaPJe7U4hWRr/rkUiLD\n0MVNTKXJqJVzJIDT5Pkz+N4R91lE0ASQvyws2sQUzH6tyDwPTXbMyungaynM\nMlcZRW0Xpk5ULGHbwCpjDJ7HwkihR+S44VMRrLt70uOZrsXWfuAuedP7REV3\nKxxyxay8yJCe4UHWGvIj5KJb2VNRCYt5vcpyc9jgNngBEuqxnCP9eqzz1g8u\nHihfpeLbdM/gdOVjby0lrQLZ2CuiLj4qngsMeNDejjDVXTarQKYPOTZsxz3w\nDoYycSUY1tEBogR2ftz6rpnpnoqQBJo0EzMGz5J9ZrjRF9jwmMeg1ks5s5KO\ndJvnOydESr8bFQevkOzJrAZFV05iKCAb99ssT3Wf0Oc3L3rNZdFgrDvvVUtH\n/jAZxIPRUW+IihDuYuuErESycP56H82q+SGoqgJ0ZWt6fqTNYqjdLvpu+9Va\nc9RDCIG+7xbhnGHe6Fb/c0ChrQk0kLLSB6aLiZLoekXnCbBX7RpHOW5/diJQ\nmLaIr996Umvc8wRi8XUF4HQPhfa+YvCNPKIOkBg20KpvtMiN2TApC1paX640\n5N0Gduv7BjnJufrrVobiH08t+Bl8INGLB4XtDOAGBQUpEokpV/r0AmGYpEDy\nGNB9\r\n=ulw3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHetW3E3Gtd7kWu/jyJSqgNGlkHjSzN5Gviht3wYCSMXAiBAPG7JOcfGdxJS0HXFmQOVYhSaN9ZJ/i5zY7N9riveKA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8-alpha.5_1584614322180_0.7375108976877569"},"_hasShrinkwrap":false},"0.21.8":{"name":"@react-ssr/core","version":"0.21.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7e68def8797666530b7a3614652215ed5bf92c4c","_id":"@react-ssr/core@0.21.8","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-fl9MFPk0kqEldtdjlNX2leFeuAWNXLWKnysNUFf7o/OXZ11wcwLgKvwE9lwu5VA3b4W315sKeyqaaRTVDf5r+Q==","shasum":"292284e91701084155c0b1622187e0345f79e6ab","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.8.tgz","fileCount":42,"unpackedSize":516943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec3LxCRA9TVsSAnZWagAAUAcP/RJdRA9TBAwRhEWehfhh\nPG0utlFCbaXIlpJcAu3+jRQjipo8ulfxhls3rZo/UtK7Bir/xoPEhFKssm5c\nmDTWrILUSTV5jGirwLxZfr+3h7lCxzOK4oVHX2KWvY4KfdsC5iNd2xDNKBxS\nCh2vPdyYb7oczcxojRVZF8d29qm0oVePTLZA1YQ0IFIS/c5uC1sgde2EJ7CI\nuYhBA5BZOX7VZ5Fh7+Bb16s9uGDogxaKkD6zFcPMSdowBWFR0G+GlnRDlinV\np8H0z2NAlhUdNxua4WDJLM4D0s+tBkPXiG5tzzjuES+ujeTgD/A0R0gwZrOj\nr5UDCYSL5ua9MgWYs26Lm7DOI9CxEK0BNtDEUqIQsLGOnWCQeK3O6XWFk5gA\nUqdtqZCmD4jKIcjntIoXYtmH//2vpnPMzuzDGU9uHiA/HzzA2xjDVsCfv1Jf\ntbLqNSSPPDDFUdRdEfa9zo+x+1v240lqCl4jUbhGx/aNRwuVTHOzQba4qJgQ\nIIN85oNg3iA5MjHCj+mVaiOtmDm8lT6QfVDb1wMp+C/pnfVOxNhQZ5+XrVhx\nIq03rrZKhp07YS3oDU4WcbLwt5VUm8RF/G132sSN0YKRLyBUTkmvuVuLYWjN\nI3u92MFenTLkb0xbo9acG09G3EzVTXXxyHn1FDHTxS0d0Z9Y/uC8Mdy3qgbi\nLoHA\r\n=JUIT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApJpuKBDvs5BdhN8eL9hsv7AFT8NeiZIqNBX3EcaKNaAiEAzWjtiVpSfVZtJ6o1sB44LtcYMWUEZtOS7XqulB11o9w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.8_1584624368600_0.7175271522919402"},"_hasShrinkwrap":false},"0.21.9-alpha.0":{"name":"@react-ssr/core","version":"0.21.9-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fbb8fc51da02a80ca09691d4aca1ed73d624234e","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.9-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-b/M3C8SEphYQFd1qQ87+/FESaXCczpzISo43j+ag+FcNGPfz6gGxh1E6sHDn5tHrVQo92rWh99gVdZTa593NWw==","shasum":"3be5ff1b0b6bd4758a893187af960240c1770b5c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.9-alpha.0.tgz","fileCount":42,"unpackedSize":516959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec75+CRA9TVsSAnZWagAA81UP/jsprv8rGSCRtX8O3IyG\nS0trmnGYlSZekG0mELvUIuLPZzFtgAoY970QhIO25SIAn7dofkISVnkUa7SV\ngvSK7M0CXHwcj6lthKwabbui3L8d/PM2WpnTSum2px57KM7M5LLpK3A0IqJm\nbsNypMUXupvvnWLS15ka0c6MEgbhDAHBuEFWA00OOQ48lLDuzHc0E2fa5frB\nxpPtnkblfqqukUoQyrbrdeAANafr5OPttnxPjbYaHQRO1jxmKa8nHljPdWFt\nQ4psTzalfZWYWz5wtrqTCg1J5scZ8s2Bc9hCqiiFQstZ1Bgr85S2bUAxjApY\ncC8/zohYnV+dJXRIyZKSdkNGENCM2okCgTpFH5HFnkdFo+kl1RJeZzdSIf20\nz/XPxfyxDFdhOQ1L8eVjA3+RiawqtkK5RTDVdemCy0+W9WqvUVAGPWcNredY\nBjCBn16XVh5W36+zkptlDtqLnnrKnJp50/aBZNV6SlBhS/hpOFNMLu5+T/Bx\nd8ge12gleLhn+CBTB9Kv3zBuASE3vtSGHzjY4s8FZ5Kj8uVkekMe5updwl0D\ni8ByH900ngjFohRqBhmZQ16tmX6h+jlpfRlbD9LZp0fP4NV4SSPAIFuRbA/K\nL3WhI53lDv+WNbLmJl/280SmCB+vwCLwQwMCYG56KuULFKRIAiT0pDZHaDVQ\nmDtf\r\n=uJeu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs36KIzXmLrPzezJ5DLYAAtG6oAfGs1PScF0VFOOtiQgIgGcefTXTSIqXagcFlmn+E3pfiKzXLWgyWMzG4BM8Ht10="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.9-alpha.0_1584643709553_0.20516961529970845"},"_hasShrinkwrap":false},"0.21.9-alpha.1":{"name":"@react-ssr/core","version":"0.21.9-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cbf966f62adde490980f43822b25d9ca43395742","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.9-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-UjqizUyeVcAzWE1saOl86D8uc1DJ5SBUn+0IcDsSodhSy5B4ah1DPMcU3szpHNvVFeQATBrOQn4AFc/PZn2XfA==","shasum":"5b1be11bb4954072d199a412747cdc58ee9adf58","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.9-alpha.1.tgz","fileCount":42,"unpackedSize":516959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec78WCRA9TVsSAnZWagAAKP8P/AplFwMstjfAzCDagpPe\nfk+BsAv+UgfqUbT6+jud5j9ZDFrnib1QxY58BQLGPkw+5ZafoY2h4z7QGfsS\nNVJnJEVwUb/XG3CyYG1VoGFKEPIPhw3xwznKHgojCL3LKwYjQd8q6CgqZvVc\nY2MuCZhEKgxkQr/lxvc4LEddwWR32TziDvW2YOLL1DcICFuNEIwOiKrxWLfR\nUDnYNjndJIWcB+xGNRcF/Avq9p1mhYxVUof/on4DNoJaYhTHLH8MUc/e0VlK\ndP8k8layscRhTRxSVgogOpcPbpvxY1rMbMI2OlPFI3xXLTxrY2JFTiKK0soh\ndGw92CvKKoJpMg4R7KXwFBZbJPtxEHq4s/7MBlH1B1I+UOz1EdOjCYXrKtfn\nwMiytQMmNvlRJhK2K3agQOlZAdLCZ5UM1u6lAB0UbLGbMqdpuOv+Xt+O1Bwe\nFyD2WSG3wBa5KPa33v1VGNkYBK8JoZx1539uMqBRxBcbZmqQchOrKgMnCkTW\n80xyhtejjv/GRUD7/3ghx48Ck529tB97mSK1uySTL7YNwwWpxY2u5FPtdD9M\n/ilDKLes0NsTeLwSIIp9WwfY9li616rpuVhxZZWeoTt4Eq/twdyE/AXVv8gt\nKc7/kfVv6TjZDokoGyTbgMTfrunsbuWmzgZQ8QcuVea/DuM+7vUIqlwq7G3P\nzOCT\r\n=akeO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUnvbVhaFUqMgQJuY5EzQrZmxBRWiRoeHMUNykVWT3AAIhAONOyLaBJlZfCFoGMwTWPJmkAmy/blqlrvPG/Z4/k0uR"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.9-alpha.1_1584643861761_0.380044466323076"},"_hasShrinkwrap":false},"0.21.9-alpha.2":{"name":"@react-ssr/core","version":"0.21.9-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"339ac7a51ab629987b8842214b2cc3ba32eaab23","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.9-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-kbFMsLZMMGDIz9m7EIX59zN4W9HNVVNbRwOo84h5NASnjl38BsAxhNeZNhkTMVgNvz5J/GzoBMce9Ykp+oxc/A==","shasum":"d3b1275e660b0eacfc8e5e0fe3e0009e0362e4a8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.9-alpha.2.tgz","fileCount":42,"unpackedSize":518246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec8p4CRA9TVsSAnZWagAABc0P/1WhIGKZU+l4GYTwd6YG\nEo/LZzDpUgcOwD8+yDZytcdo1+oGoy10fZR8Cb98fg0xCsYyiBNcY+I9NpBb\noGj+ZieN9yyqVreu40jZof7QOh9VZPeOizsXdFW6cjqpJUI3cIeb79qtSEl4\nB+tP2IMBA5FdDDXbVAdKXspFfy2NdtezgZznUuqIpFdCqQnC6iG6uEbsYdyB\n8XNEAfeP3xp1YWGf3tiv7V3jAMgCoMqJgzgswTRrFDPrpGndh/nz/Dz4mLCn\nHGaW44ZoachFrOmugN9QbVgTSCW6erjeIQK4Mf3Iwmo2GWwXmj2gtNJ/MEWL\nt2rHrjTn8TYxznzIWLX3I+U1VL1ZLmNimqY88nfa+yQC2sdZli3sthDdcEOP\nGenEWOWNRA+j4qL9a3pWVCfQEbnbzK6EwoejAk2G1FgrRKjl0StU5/TedNwz\n5Ur+bK8Y94JzS2kpC4EIyiUY7fjPXa9aoIyJm5bp+LK14RF/PjpqKqIpsjXJ\ngpTFL2baFXoh4es4B6TO/rritBiYiyCOI0yIBWeX8apjU7tnI/1Bh5siZM7l\nFUinHuB+WeL3tDdLbI7cKUPlKsPcEnBzLSor4YUdEZiWzKx48kGfyiqHrAvN\nAVCJldXoJPFclosEqlLQ+7/pWvjFt7WulPBoNemSrbPYvanYF9TVObU64T4M\ncDfm\r\n=ALH1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFY71FzPgpNwpt/xeJve0MruKfURPrPkv93jZ9XtkttxAiB/TC0g8xpKzarDR+g7A2GT48bn7MVn/zteUD7uMGABiw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.9-alpha.2_1584646775995_0.6977388935237201"},"_hasShrinkwrap":false},"0.21.9":{"name":"@react-ssr/core","version":"0.21.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e81beb8adc30b86e4dbff618dd4397f6efd9b88c","_id":"@react-ssr/core@0.21.9","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-uLxjSAGZOnixL3Rt5OdIbVJwLuC8ok3Tn1h+nrGUmDaZ5B1E8wjYaYj249+xv0E6agd2qYEdox4gRFX+8RBV9w==","shasum":"742fd400ece11033219878bcc34ab409f1552b0a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.9.tgz","fileCount":42,"unpackedSize":518230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec8uPCRA9TVsSAnZWagAAABQP/RbtVx30kPdtSXVoGEED\ns6lZRXjDNovsUtfBp7pUUXd6kSiFI8pkE5thIMth4a9Aezp4Nf9Uc1GKgiEQ\nY1xwp6nG7V1oBLRy/xBHn9x4xWj6cHOkAzDWGGLhIdC6UJ+uzHIZSlad3I3s\nRI4g5CvqalwQH1d4ONM4ql53IIkHi4vmaHi5ApA8TH7xChBsAz1eQQrdxjj/\nozzpzt2uMzPCkcALMnDC9pjz9HecShn/j9Kfmui8xrYWE1ZGtQ2VUfDe3xdO\nbg59PW2s3GWUmR+EsUz2Rmdzp7PupfThNGU9KCIY0bqmjTyfadF2tf/IGjcC\n8iXl5mgtQrW7Vt1qEapeeHuxQ54MNt1KS5+cbbFMx0vXvOIVVpJvVlzLMIlj\nPCwKUu4bVZSB1EI8YOU5xDG4q0ZQViSN7bTJF2w7xtj+Sy9C0/WI3uUHM6Ri\nxVFw9ZVKms0PBP1zmadzFzm/LDKsiITzQiybvj+eM5mDYW4bzUCE+osYpU/7\nrJsPMSeC15yzeD4WPCizd7kD2btYPU3CI7nxEdIhR1JimvA0tAe1S+GdSwvO\nghatr0pUEsE/9rW2LXuplmS6UEhgme28Mp5dyBp3t56IhLoRwvUSdLQXIK4n\ny2FdV1CojDPaHZ9McUW7E1bDcH4zyNo0ct1LMKo0722SeF6IifpMqpQ056dj\nsMZv\r\n=gnGO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDLjbceImAIC7alpM1i2rYtVz/dtX5zIQVC/jeBVopZoAiEAyYE2Wg5LXNiZPbkafgRJhwIXYFXiuR2Q2oPNbKnhPnY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.9_1584647055447_0.17719795022785956"},"_hasShrinkwrap":false},"0.21.10-alpha.0":{"name":"@react-ssr/core","version":"0.21.10-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"bb530afd63e07098ba4408dab102b69fd86e053c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-+ZWDU+V4aFG+hySg9Ce0uN8czJPdPeppFAY53ybNW9TDnMFxV37JWG2VhgROXRNOoha3nbOIovWGxKvcbmW6tw==","shasum":"68b273071b6696a538699c6c35d4e8a61c9c7c66","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.0.tgz","fileCount":42,"unpackedSize":518565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedE92CRA9TVsSAnZWagAAhRIQAI+bpGABTsz4n4E3EwQ4\nGLsbmvGM4ArjrCAsuis2i2V+1TW2jtnkGMUgjZbVug4f5oDLpzmpSwOgTjYg\nYN6pPilwMOW4N7bb7xveWl2ZUChqbGx/1flD6mzoAH7VtFFLDAOqSnVdIlsp\n+JshEA53gQqTlcGfY3WcnL/eT0veS45G7NQRxfdbKzr5078ZCr1XEzwbr/WY\ny7tmYZw8vSIPdPWCyquBki+UbC+jfMYBXf+mfs7PtKDvH0/CpPAc5r7KfdcV\nNnW2yyh+CCGWxoPXzU1uiBarby4vkfW/+Fr6fijmZtYrO38iUxeTuObf9gv5\nnFjFLA0Q9MagbBfxEaD5zJGb69a4xATcjTpDDo8xwX2zFSAK9OV+3fTn8EHy\nrAESEEr0AwWYJhZVGlRufIIYRElQPYdlCYPc/+13etjV4hgG9jhmUWUyglp8\n7qjFCBOrLmNy9c39yWbPAAS6NNMuCvuF7lTAi/j4aoQLlm+qNy/b9DKm9I6+\n1jvOFIm4gX5yBdcNwLzdQBN9hxLOuqb9lEw0Feu19ev1ENFOBD04NIHrc9Ha\n2vrpLA07F3BWtk04217pux0P0oMCs8tdaJQOXbfGJBVTZ9xoCDUM48m5ye6/\ntgUqPBLAxG/caCdD3j73vjSAbczvkCXUytYqCYaYR5qrcyruTf67u7hUtGEa\nougL\r\n=tXZR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcirNp7NjWFVu7O2WgHh0qQnqgZf9qeYewjCJVlqpGpwIgQN8Ud6AlW5lY2Nf9DgJGmWL63LBZQJ8VP9r1mecwJmM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.0_1584680822110_0.6262350192479065"},"_hasShrinkwrap":false},"0.21.10-alpha.1":{"name":"@react-ssr/core","version":"0.21.10-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8c163a45c4e6c69429cac869b271a770dbc84ed8","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-S3Dtx3rCyrbWD2KYaVIhRCr3OKN3J+UGbpB+GNDePT4XJfaJK6Y3zD7qIUdl5kr1qKY5GPu1tGeMOyCc2+NUAA==","shasum":"26cca1eeec7163fd8f5ecaae900fc68707ca39a5","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.1.tgz","fileCount":42,"unpackedSize":518317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedFDbCRA9TVsSAnZWagAAL6wP/0b0VqrM3ubIZneDDTXi\nJ6H3nAPOELnGTcjpyRvf4HgARePHPb6DCHVwt6IHXoC/1JzVw5eBLaW+xDCv\n2MJKtOrfOoCiCjlMMIQX5DHFEwJCgPfyMc33yxFw1n5Mjv+Jpi4Kb5MMkZc/\nO7OrJKfBh2vnEHpx6M6n8IjdmKHLNGPqIq+ljVY8yBTLvZVOATUY8beNTmwc\nrNaPIZ7+a1gB543XMF4baGEb460/llEmz03JjNZFMHz/AnhoOiSnfl40t/pu\nT1zzGQpHFPsnfOf/s1XLa5G7qyBTv6yT0PPutaZnkmf+nD6qWdNCGB+EBQu3\nfL7Tnuqd71MKsgoWRQ5FDN/rIa6iCau8KFQkQHtOHvg8zNii2ga+rhIBhv+L\nnxhBPY4fhzkOdXfeKCEG/yoaQLKkf1as4lO1Dr3k0oXY+P/AMyn3fnP3TT3V\nXhpkDbIc6BbEJQLJ8mV+XgVj2/UZPgqAUPa7M+jLe/XFpfnfEkIfvBW17p+C\nYF/uzByZxoJ0vJHfaJn+vF0t/ouog8rIhRTOFDXLQE5zuz35l5sEAUL38nM4\n6JRn4cRy9UrbbhqUxvkDP50I6otVaDInAne4SQc7VnsC7ILO2gBM/b0ZhJia\nSlI6byFYdRJd0bQh8l3kpcI6/WZMrqxtG4vr00hEUBitA+6k0XVwAtdauAMi\nevOP\r\n=CP78\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLNAnj5k07gk48ywRpoYG/MYhNZJZ0g0BoBVAE8SgHNgIgWNEJPjHVHUd6a0NKOOzkjkvgLUDwcsfkD87JrWWFDDg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.1_1584681178991_0.8913433889084845"},"_hasShrinkwrap":false},"0.21.10-alpha.2":{"name":"@react-ssr/core","version":"0.21.10-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"060a13aed8fb9d5f73313ca9e9aabcf920e22334","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-YhdrvXviNkQ7+ETo+4o7rJqxGYb4E52Bb9KgIoZA/1sWVzPJhf2uPc/gj3fsrFqRN7/j1N55O75giRyJVN4xjA==","shasum":"2ea3e6df1579405eebcf7500d13dcafca29645fc","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.2.tgz","fileCount":42,"unpackedSize":517331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedFJnCRA9TVsSAnZWagAACm4QAJU7+35/sGARyDIalAa9\ntwfgLkqFHiXu5hi+feryx3mFLmsIUqPbdvX7BLNjeswfgzMylxBMc18N4uyD\nnPK9RAVOrIN0sGQYBKD60u3+54dgsLl55ivr6oNzg29V32lcyCtFZnWi5WHr\nhweYCsgTslyTycJcG0aFs9RbbkgxPprORgWWH+pZBShp9Zm4XGZLFofJe1RG\nlS/jAudUv37sKLK+qOOaVgndjqdWSGM/RVJ/nLSZ2jModfKPjKW9cEtX0jYz\nadOxK/AjNN+kf0kW0nZFE1S1vBbFCn5f4r/5gpD8jIz3dr39Z7Js/lXhs7xz\nji0AGYs5KW3n1dAsrJhS3bxATj9t3K20LlrSAaRiBXOJ0wTwaY5PNq9kYfGV\nyZhMfk+qeERsRWQ7wM+Lvg7F/sFD8pSHZvJaHX6eZZRfDK1pQ0/RNJC5IzsN\nQyDYTJqtnW4CI6foHMEiBm/8fx6VLEcsZ/i4KNayVaLG7vQujW7oAR1RnxKp\nbcnhx1bl60LYZop0aRNhWvmKbFlssy3G4hZSHV0au9dOca6ajsmVQkk1veJw\negIU/cYxTXM4RbSvh3COaX/2ZKrgRx0aivCxa6AMUBn38GfLX5wnx5zFqvEM\njT4jSwDYGe6VOBpuk8yz9QOOLQSF/cB21WALqDqxNraiepVoe5LEFm933qaa\nLyVV\r\n=yoa9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2ukgdB30JUHL6yKxaA+5a0o3u2kHdY6BZtwRjep5pLAiEAyUYv2G2nc7FfEmfWf2jUtZHLg7lutTkEvAjibqyVrDU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.2_1584681574648_0.07686086490336752"},"_hasShrinkwrap":false},"0.21.10-alpha.3":{"name":"@react-ssr/core","version":"0.21.10-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/turbolinks":"^5.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0a2d23e54d999fc6e2b4def7cdd89a21b21e476a","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Qp29G+vPeEHCbxpSdKvkEJ/MChABL86ds6MRfmAS0nf3qqRWbs9N6eThy3vM137TSSi9l6zp8pcJX8YcCyGRig==","shasum":"ef4d2e22845cadd3f1493316820170305d17bb45","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.3.tgz","fileCount":44,"unpackedSize":597987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedF8OCRA9TVsSAnZWagAAcC0P/ROBh080pwT/AbV47YIm\nTM6iscFLonlvrcdsmh0svunoeJhaC5T9nF79F2q9O6Tx17ctGuEQm0lTR113\nMY0UHog7clV4AcL6l2UToyJWymh7UvAN4CaO3F7ZedILiS2YQAzqe2uh15vv\nF3mpTxsmwGuEfswbykVzg39nH535NzsPr64+5DzPMWk44oi9f7meE6Zbx5GT\nVNZBW0xoG+tR2jlPkwdzRJRQNg0/1rXtfrcTAM9MYRUrTl8c5zNhgRZcjY0N\nLXWGxuFbXYwZyvNIjs04yQ4GmHvBbp8UDZHSsIhtuxHUvpOfMp0GJ0qbTfTT\n3ywsmiNy8mbZtxLuX6lRCR7IBBunrRSk1zAhdMC9Bx0BqgmVqsdJzODv6m7V\n11MVgejOKSLc/0zagLpgIjG4WyyZawtvw4HJyucgaLZrdQAWjm80GlKx0QmH\nowMj0Aj/cUWgf+3EOh+MHq2Ua8vApwEFQLPKUgJNq4fEpYvJ/ZqZajrxFGy4\nB1KYFvoW2STWN2QniKKpYYskVhAf3HI65TtAbCZdBFh58PZfaYMlOK37C2A8\n2Qf4U4MzMzhiKITifsp1i3CLpVwoGtv57INIhzh2HKUIk8mpgV7LAkLhBlS7\nuMCIk3QzFS04Zq2AZdj9RuR2rvB6wqgtDvTqY8xqsaGTHErrjxJRftSyOx32\n/yoA\r\n=qTX6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4SVM5d1roHPl9WKyajRiCFySUBPLP17sa0owZQyxmvAIhAJ1TLmpHxY/opO4svJGBIf12U/r8rOqSUl3l/mBbJs41"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.3_1584684814271_0.914411025922401"},"_hasShrinkwrap":false},"0.21.10-alpha.4":{"name":"@react-ssr/core","version":"0.21.10-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/turbolinks":"^5.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"dcb3dfd3e56f8a2915bdfd251a361097a6eb58fc","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Knvo1cnPkLlNNfYwv+quQhnnZX3DHHluaXncSdDPhrK+u1ui/DtDU93iL7/GTp8FOvuoRcqCLMuRoWasUJknGA==","shasum":"c20b7c241b46ece990cc5119a433e3dcf1a5f664","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.4.tgz","fileCount":44,"unpackedSize":597987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedGEfCRA9TVsSAnZWagAA6ZgP/3TTEzcvbx1W9gGm5eky\nLHI+ygJNhaLjagPRnttGAPEUsdM6tFzc6KIHOIKvNgIV/911NAwW9G8FJJ3e\n4UAIzEiOiVo5P21yHFMUO6lsda7G/FEKOUxeh7MfAalWXAlISY562oPaWA3l\nSechlpCSTzKItXP3TgAdnw073/R7Olx2ENd2fehGM71/cTdLUaoBkhcPWj9c\npRZ8cisuLbZUFDd+4GKD5vSrW+83PQCksZ9m5thR79glsEas4JE14wopcXik\nGM0F23HSTGi4V5X0/yZcK90eGTGH7DWcSd+UdwoRNRMfWEy9G/CYOqyWfA7E\nF/M2k7yQ+U+QS19z0tPvTe02G+hUXFW2bGi9OH5WPK4BKpoamY6Ubq59XSR1\n38pHxlDgIY5b6dqiYWI+3bszmRiaglX5vnhTCLxErP66MPyT2g71DEM9JeIc\nFk3kkT01Bb2qWrc5TlDsxHTpvxXQoPzMfsENLQnWK07U2HI9qabYFpmP7rd/\n19ysanbHO+ntH+f99S9OaGZFFTW1Qa3qi9FSlzFynFZhmkqsR0UwXKobgHuk\njfUAKN3ciOnxW95db5nk/DgQS8fRIY9vUvm9tBYl6ovJf47FIZsVn/7Axg8a\nimGOPxuva3no1zlK0mpaw6IDHbdw0oKvMGf4KdHnrUnUqcCef8rPa1RjHHZ6\nXnmo\r\n=FfoJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKgPqiW+EpBfKokEv4SE+WtvrkIal7QF/B7knK0LMIhwIhAMEBbeINlVyBTlc2kXaXNzxdNZQPXmNuNvYvFx70qHRq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.4_1584685343146_0.902667774178544"},"_hasShrinkwrap":false},"0.21.10-alpha.5":{"name":"@react-ssr/core","version":"0.21.10-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/turbolinks":"^5.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"68562ebc042c509c095b91dab014cf36a6872337","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-aaISpJ96GNyQTbUm9qCUkUUwqh0lcIMXzAC6VIHqAvAQAA5kKimM72UJc5S/ZDVhamqtprYm6WphWj7gNou03g==","shasum":"98d39909040d12e2a91dc4b1161e8fcbd5553d84","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.5.tgz","fileCount":44,"unpackedSize":598356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedGTqCRA9TVsSAnZWagAAPK4P/3qq2jEQ3zo+DCFxGyXL\nUKWMm07n7fkru+4gp161fDC4R7/TgV4DmBqBgd4cDKlCxep1L4cqMbxg9Kc7\nhwCYr1PWYw+fwow7BeUkvY6nw/T0HMMDCRqwRgBU/QuDRQoCiUiyXfYqdtqg\nkI4FIzyuBlcXuPdSzyQ31XRFjUSE0iuNIHMSTuxpGvlH7BBj8lVT+Iue8y7h\nIganlvbJtiDQK/GQZVQceFTz/anwmJcd5+LmnjjU7Hdr9VcwIhXUk3sSCXxh\n1Vqgb46xmi9x4a7kpXXD8oYgqKItJZJLQIk/vHDRVoeHkGB4c8Mq54QXKPEr\nKpowUlwyOly7mVJGjHFzWnIPF+1mvaXq473cFPsB7htuFF/tNh+ohtOibmA1\nhWE2y5+015+k4qymYwIu4EFhnKI5dXl+k/bNApw4eQJJe7vohEqy31oR4yXt\n5Xj75sgUYNNdNFzEyDWktrknDkiXCC2tJmRm0WoRfv+ClruuxfvkmqZVTtsj\nVtmCdgRqg6doCibN/5aE5zo9TNcWXx9KM+dl90Sxa69p5vzfMTESN3F7bRAa\nP7GK2WXZV5FUOlR1lni6HYPrY+WeiERLX0kGdLwr52ADhaSycjnNEFEBAtEl\n7hH3PEyDPl10dyV7fHvMsK7qzIShwGC/UTXPHemzqAaUv2HeQEaK+m+Bf3zO\nDUu2\r\n=waDN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpw8xAUh0hR/SAiX6cW3wX5kdqCxBTs2zBNDY3MooydAiBoBKHkxdqsIX4s3FCQgdESbgy73WLJGjtUjwXy6cX2Iw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.5_1584686313573_0.39706558501237144"},"_hasShrinkwrap":false},"0.21.10-alpha.6":{"name":"@react-ssr/core","version":"0.21.10-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/turbolinks":"^5.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7cc2c8ee99af48dba0bb034bda1f162584c7a265","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.6","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-1ZMXcpUQo+M9ZQjXWrPZ/CAgtir0iAXdzH9WGMgELBNpvsJxDh5HmtICPJ0oHMGA2XF0t6EJj27PxUBWy+ciEg==","shasum":"f5dbb77ef4e94a80e909d3b2ce24007355a0a379","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.6.tgz","fileCount":44,"unpackedSize":598356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedGlzCRA9TVsSAnZWagAAxcYQAKAcxxyDgoTykekRetQ2\nUtFyvkn0TyQSS4wvb/e4+pA+21oFTvwdniAgS85vYLRw9qmyhI2sHk4SNguE\nY3SnFIend5XBHb8IxHq9/cp8JwWYC5C+Jw79dH+vmw/jxIdGglK6TV0HfF26\n+rRfMAvYL0Q1r7U+IQIJDlnla5W6pNqbNj9D/rzj2o30GzK4emMKj5+J7mxZ\nMQwcxJP4qVr//SAgDLmJfpBhZxu6Qoo6FRJ0t/kFry9gqfTX6U92CfTaCojK\nUEOznqG5c59tH/N88fSp/v+n3ykMP3ru8jhKnoKf4ebCfNEoVIwe7aFhS8Zu\nm29FfNKYeYkRqr/KZgT6UikUGUq4hRQJfrbqR8uU5RlIKJ9HfNkb/33ySXAb\nhf7weuYM10oTd3BnCesXbU7Vsl+FoyJYlghjXW1keCrLNuHZcHTfCiUPvdgU\nGQ1KvO673KilRNdV7ks49Qnoh0+gmLigsucFZ4NXue1aUKHWuA73CnkuYjxA\nqihQPX1LqgkgJjUT46SumMU/U8YiPivrqmz4k7JGcA85Y86lBHP0r00ddY3/\nkIbupkD5yN5DWzMGNsgiqUKmKCWSgAzlAv+57E3Uyk1Smfx3idYcgYj4fLOf\n8vMNiKuLtgtT7VyHSzEWApUi4dGRaujaomFxpEthcpc8l5JAi2+gLA0V6u0P\n5hx+\r\n=XlJi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID93EM+iEFwOtBqvDTm88J4hNQJPOeYRFFVI6PLkljuqAiB1pvnx55/1KNImkSl15ehYws+6CSbMR/eFtqa5Et6A6g=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.6_1584687474594_0.15977054209573183"},"_hasShrinkwrap":false},"0.21.10-alpha.7":{"name":"@react-ssr/core","version":"0.21.10-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","copy-webpack-plugin":"^5.1.1","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@types/cheerio":"^0.22.16","@types/copy-webpack-plugin":"^5.0.0","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/turbolinks":"^5.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"12826a00c65837fc2206162cba595dd2e1819365","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-ZDLcbqzacJAOQKrPqL2yj6uCxmAwEFMB4nzAGlgOmJ6r03vv4gSgS64Pwv9jkrwLri0c+qbA4CswaFWlBoEHWg==","shasum":"259528be92e1cc3319641604623c6c1a4013810c","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.7.tgz","fileCount":44,"unpackedSize":598430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedGouCRA9TVsSAnZWagAA1kwP/RMfriWXHDTMpdVZk+b9\nNgWjTlwBj+n5n68CfwF2H7dDQ19Etxj8hNXQqMFFKBu2soPd/i+m6LZ+P2Wt\nWqj1RrJQAXT2uT8WWvb62YzRTSSo8CBTNDGnFSC9dSkd3p/03/K63/uHs+XJ\nUaqsH3+3oescqp8EJmQ2i/kDSQ98ZXN7I6EByN/YGLRH+ttRnNVOw9Y+ykvB\n+PNVZ8+5ZI5zMib8SKU91c046x+dhS7xS6HgCqz+X9J+AGUsiFEew5F9GPtT\ntk3O3oLo5UA9c85IPe4e3y8ODDXc3ozu+tEmw/HfMGLpEY5vQ+QCMwpQp/CD\nu+xreGYKzrYyD8rbCEjpbY4eq/3QdW0i4tBb4UYyKTSF3RjlPaedli3FlnBd\nYw+Ft2u1Fcx2lA/a+NkRaEtOwgIfnQqRTDkbO5GoyH9xvAol8/O+yqt3v3UH\nM8atLK9tW0Lyl3bb/7QhW1wlrGKjdE1CI8CHqtD28i5myMYerdCn3n4EVkc/\nckE2+T6mKrN7W9JnvMp0caZ/xaOzHxa+OvT6jdB9/G3shGbNVvTKSVD2e1D6\nll8uUfu3XIaiVF3l42zgKMWxu2E4zTAwYudqBl4eHEJPdFwVyY0wOw9BKIyb\nl16f3Dbx+rzLGbR+bERc5XiN5uqut1BhcaV8yhFLtvfOLVrc8c42BudeD44m\nZODz\r\n=ZpOQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBl7Vr1IJsayg0uK/RtgBVou4nwYSIIichBYzYgQZxXyAiA/SJQHtTplx7Hbv01v77gCjrkyh4hssum95oYK52TnbQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.7_1584687662119_0.569518263047089"},"_hasShrinkwrap":false},"0.21.10-alpha.8":{"name":"@react-ssr/core","version":"0.21.10-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"75f67b9e8b18c8b98862f3365495282e36dc4d3a","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.8","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-U0vsp5o9KNh9wpV1G7ffCIPKgvO1hq4BOaRL/LPOPVtmpS75sJe1MJoYf6JTTmUFlg9aNq1VfAl5ugLusWykiQ==","shasum":"e853274b232108dc8d45490bd9eb091bc52aadfd","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.8.tgz","fileCount":42,"unpackedSize":518565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedHDdCRA9TVsSAnZWagAAyfwP/33kIxGH8RhLNFJb6Ey5\nbfFAwvgyeyyAf7vcwi/i3TUwx2axjX5nrxMBFPGACqLahqX0q8YLcCG9eh0w\nSjfS4jZ3pjNPHgnozHSeB6WKSP2lhHOUjVffi5XfZawZPjF8C8t+UIuYr368\ndwkisRGFonn6yfmUul820T4j+tyuzfpbEo6JICZs8JVEJoJGGDBYOWK8ixR8\nXw+Ru8JS3gVJ1tXO68dMIbJxyUlK3ZzNVef+T5ugJ2BfzrKnXx+DutXEWZT+\n5/ssLkym8w5mtmjybs23G/3GJ4GhvCX3oBEQZ7ZbWmFJw6LQwrPuwukVziOl\n7FhfontYsWOQJjvs7kiMrijRDMpp3nfjpMPDAs51Fe3flbKyFS3va7yGRhkw\nV5KT9rVwwY5ZprrLSg+By2q2hCPA02r1qcjTwG13Es/rts68uoTeuUlAfziZ\nLS7pT7ZcOYKIpRhhbHYheFt765rlo0yVuOf8qHA5BhpSHu2cswSFXJ2F1kLy\nGW56YYcknKk49AVURpvpX7/f5or29168h94MqWO/T1eLMUXuhxWc7ynIQZc+\nQzSk4KJ8/RaZOUPSdKhOffzmFn5b0arO8SXDZ24WQthNwx3wEPnqnQ/7Q+UD\nOrrChMhuxDG+AOsU4BjfSkgRBnWKYnxRJC0pS6J97LkGdN8cMQCDWCz+FQ4G\nePRt\r\n=WV0w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHWxW+X+0DksB4un/1jLsjcF/iNFPZQy/42/pho/Tv5QIhALtFjJIgxkipAkpuYjYkZIKI78ZrzORE37u8A4WT2zaY"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.8_1584689372837_0.39656334764032497"},"_hasShrinkwrap":false},"0.21.10-alpha.9":{"name":"@react-ssr/core","version":"0.21.10-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"42bb2ab09bdf95cbf96f0fcd53213cdd5f5bf88b","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.9","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-nUlpJYrr9KbMPtfzg9CJuCLmTuPgg/mhjC7+9MRWCjtzd0qFe7sGFpxYNBtaSG1VwHxqLcE4TAvpHJTyWZ1jdw==","shasum":"2e986d9f92eefd19e15ba57b8a8dad83cdade178","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.9.tgz","fileCount":42,"unpackedSize":518895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedHHACRA9TVsSAnZWagAAIw4QAJFgoY41TrutNxyda03a\n5oQuHd34InxJCRWhn+kQWrLnHUCNw99emRijP7PzwUXenxaKDCCBCdEgYhyu\nHy4tDaRolAioNwlHpDDgqjkhyQatORKYOPI3HgXg+dbLzR3t9CEoZCeFrs0k\nrU71H+V3o4p+xENBJ8FhEEOl45hXCJvIOztnBam5ZRDI93HBg+X3/foqn4q8\nEacBv6ZHPWIV74dCYF1s8p3lDQpaQ/76AIDeP4sJzHbiTTCUQgIU9TgiHyXm\nCfzqDE8qU1vtugU3/eoRpyPqH9vb2wcNbS/Dl8Lhejb5hNaPqOKGQyyvxVEt\nQcirK6aRsTqi/kef3KeMDSxLLps9erVH1QMhfw7XsHHl9SJaFAMKTc4gQr7O\nGWzG8ocvD5tzqwbImdKpeZ8b943Fj93pASyO/uvy/dFZ4q2egKjlHjS7iFRk\nDm4aR1k0X/5Y54DjM2oMbi+i9FRRKzc6dGueOozAA3De/lY6iwsw2l6dGBd/\nwbZ7ak+LkPWVl3zITz9iwZNVUbfs7HjIldNMNB/zbB+mRxmThaudQeBgPjRP\nsMLRkyz22R0NXVMNZlnHQew3dqsNFGwy2/Eu/cW5gSPeF4r8uhJOUZHS/8+o\ncM4k3YEwOChYK32nm5yteFcnPfDwKOFAB1tl68lRedBQobFHW1kBqr7PeoUp\nSnMp\r\n=MkZt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB0d5Xx0BsLmVqwlcniroAS9ThgcsFNlSqk6sFKfldy/AiAt37liA0wtg52a2okFpCNJb4572cM248gq1k5wuVY9iw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.9_1584689600519_0.26322170054934135"},"_hasShrinkwrap":false},"0.21.10-alpha.10":{"name":"@react-ssr/core","version":"0.21.10-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","turbolinks":"^5.2.0","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"f51acbd6edae7791cfa9edfdfeed342c9ecefd06","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.10","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-pA/Be0l9CBlJWdk7mXGKe3w0cIxoQ7xSmuCZCcYQqhKdElgBn+jl5xk3EuE3KLQgBy0lq3gxXMUWp3eTtXeFzQ==","shasum":"ebfa70d5102350225a275de127c885564433d469","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.10.tgz","fileCount":42,"unpackedSize":519028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedHLOCRA9TVsSAnZWagAA0EkP+gJivwVB4WZP/mx87tVE\nxZvfNv9aPBFZETI5IAOFSDFcRfmkmwCneWp9QVEfN0l2mabjcws8ZOQRTB0g\n78aniIzAJfqGlhIHl2aGTuRCjFidkOqCQ5KnOI0T1XrkhtF9uWceBeYBleNk\nRrdwj8feIT/R+DjzqvCQAfqz+LNnOn4S09o2agaCmfgG+895fW51i5LyRXyl\nKKejGw8XnHIz/Ux2SOOGo6q7nksysLnyzvx8MFpbb0Ck73gB15G/v5dvdcvJ\ngIXMkwC3xWjx9Ou90lFPHZdrzIN8zK76tdWIt37Nf04MQF8kOh2YuuOHMpi4\nmHpgz5HJd3nnXRwZb7QSftIQ0JN+cp+Np/qhwBsb4eik2FVtv6PxOQ/CVv/R\n2A8E45EJ3jzrgWmlbDZMyg3DgrErynwD4/xTGYSZpxVkw9fun685vOH3flx4\nVraQFARz9HuSL0bnlkyD3wh+KxWz478l8+HVX8uk7/3Qnnx2Y3GzJvVlimFA\nuf8GZbQibhJg4fhyx4/36kenkaDw5lQVcxDrcH4sW6t5TN6PASEh50mN3/9y\n6dNaPe6Mn/pgObqDm8UiC8JNViV/fYO0/AlBiNVgC/zDslsiQiwENXvCfyUR\nEsuDMu+HWCwbAoZe6YI4q+PpMC+s9IYw0Yr1x5QpMEFSJXwRuXbolo1BoGKJ\nk9Oe\r\n=rnj5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7Zckk2t8zN+hvP1J4i0CJAreFt9AQmycnvhesVpwAyQIgGcfdEC/FXhjKiGs/ZoxWKnWBNq/IOjMU8FjzFln0jpU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.10_1584689869943_0.3264161982809497"},"_hasShrinkwrap":false},"0.21.10-alpha.11":{"name":"@react-ssr/core","version":"0.21.10-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"cf4a375ea1301dff3080301b4705370dc85c95b5","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.10-alpha.11","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-mou2NehZuZLKImd7RGeEq4XzpKdpeTL2PAvABKEJCaXU7x/GMgEL0zNpVyARJSgnL2PoqcLUI8QUWOs55mrGbQ==","shasum":"c6cc965d41131f99867fb7bb0a9f01801275b98d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10-alpha.11.tgz","fileCount":42,"unpackedSize":518578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedHT0CRA9TVsSAnZWagAAJUsP/1bjlRK9+McogmE+qBjK\nXfiGNaD5owDkzzA2Ih2SD9HiuYqIp/uikLR30v4T/QYvZ+yntFkW2UfDl70k\n5j4MvBtlg9HzWHvu17PiROVm872n5jPruTClZHOUFj8/djYwxdH/XmF6HSSv\np5E389VXgbWlykxQzAnfVfutp/ldroB+0VnQgbpbOkKWFA/2s4O/t4bfKOX5\nIUYSD9OY0BNW9OPPjiD+JhYbE15G1Fsb7yZVXTGRwaiuwR2a9xVrLmIiVMri\nFWBP0jrBjOC6uhCsd4gR93FH7XbzFsyQPqrRVCaRgw6qTCiOiSuQzAtagN0T\nj8Movy1w1xGv5vea1SkfcDedDvIWLCkD4vxsElNrrAqTlBevSjqJdyVWLS5S\n9ZCSUux7COBVjnZeK0hECm1fUXPtCyQ7yT2iqd+rBZnQIAIDUVbrFiBKdi5C\nKcAzdV4yFret2z1UgYd9fZhgKlR9+MOFJwxxRle/f88nNenudUDxmwkIaPAh\nmu+ABODm9OwA6t4UF/U7h00SAL7hyjHl+lfgyI3yhIaqzTVDjVURQ2XmB64h\nQ3BVar9STD8yWWocSIfXObIKhuWlYo9uX9lRKiJqky4YiTwArnQ9am/z2m1y\nWySJV1+363hr+vqC/veDxkLeMIrvlq24iEY4QDXZo6Q+osRsB3M22X2CZ3W9\nDd2v\r\n=Bx0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjrvdw0+yS5VjOaOTMT6mX+Z6DY63be2Hv4SrWikOipAIhAORvFWSD8EaLfX+Im4cju2yRrOhLFZYaLgbpBoUNfXAQ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10-alpha.11_1584690419797_0.48999771327541985"},"_hasShrinkwrap":false},"0.21.10":{"name":"@react-ssr/core","version":"0.21.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"86b22e71a170083a3e8a04059f8dbb66afcafcd9","_id":"@react-ssr/core@0.21.10","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-w5GoRKXmEFNH54AcvG3uJYaypsZRvsJ8FyEB4+OzLVQh4T1qfq9v6dea2IdQm+Er7nVsQU3zcbEuPC382GoUIQ==","shasum":"9adc284508c3bf42ccb1e86695d2ab7ef380e84b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.10.tgz","fileCount":42,"unpackedSize":518561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedHWrCRA9TVsSAnZWagAAyOUQAI48FCn2hjna8O5sk6Xr\nJwWEkr1nDY58h3r1Jl15DE2/dFTX/DVZwma5mNQ22KEyrYd7jmoFUdAaXOGH\nPJ7cOe1ZFL/Kc3kZEi31jIzuLzzbA/ZRUzcitpVHIVz9ATZ+9XiECpsjzUyP\niIQyEuUrxQWIYtiQq7Jxk//antaBHoB2oRJba6usnZjhzYRExO1pRzCoqFT9\nqEUI/vOTDttMyG5O1CwsoI1HOXkDSdZvk3xhPTjGkRXbaVNGsJjl0v3sxd53\nIeGyWu2x/LOhrlryDnjH9umN6rBdBenWBUnINlOyh4jI6QaJ7IOMcsY5+M6n\ntGTrqXe4aMAzXJPAQxbqZ9xj51AvTLf/r/qeeCI9NP38NK7Y+iWDOr3frpV+\nQpLNIOhtivHNLXFHSWfsLPZIhUeRztXD0UF5GkBYVNqnKSObSuVMIuB58gjl\n0UkNBqbrxUycuGdSF5MJKi8XvNjTeB5e3m663M4RYw7Y3UJCAw8Tc7t0PoYx\nb2+P8gFMkYtjIVEdyOQNAOzgLjQfJ1vaFamLWZWQIKeslfnihpLUOatrBq26\nMagkwt9ZStEaXtopibs4TtaOyIqBfAx7tzALVRDp97CCsOjBVrHspTDVeGG1\nR+ABPVUzc7VDBZSyl0L97TL1H67P6WQy36+u4lj4zVU3IrugeIb58bxGzqe4\neHCY\r\n=uMch\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkA/rkXZlEjlS0mLvAkxjBXSf1vZIJL2osW7WEPi7o7AiEA4GQszqiRh8MD1o/AghBzo/+99DPm2Dyol+1nDslS4H8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.10_1584690602256_0.9643148235878563"},"_hasShrinkwrap":false},"0.21.11-alpha.0":{"name":"@react-ssr/core","version":"0.21.11-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8b239306487ee0a93ab291b2d6f84471ea1cb258","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n### With @react-ssr/static\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/static react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"static\",\n    \"build\": \"static build\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/static/babel\"\n  ]\n}\n```\n\n**`static.config.js`**:\n\n```js\nmodule.exports = {\n  routes: {\n    '/': 'index',\n  },\n};\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index() {\n  return <p>Hello Static Site</p>;\n}\n```\n\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\n\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.11-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-xiB1fj/xAA9pfF8mMCtjnvhL4+5s/ICnesgcvFSfHBUFWm0vitYO48SFJ381G8SlCOTCilYIQ+0n32MWIAqGcQ==","shasum":"74aba4eb9cae17dc8187a1ff26690985f59e7682","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.11-alpha.0.tgz","fileCount":42,"unpackedSize":518637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedJiPCRA9TVsSAnZWagAAjycP/i5v8DF/4TZEMuP7bt3r\nzH4ysmiw4s+ShIbRlvPyvLgi5ra5Iri6eqMTjBUFrbn7sprDfJp1N1NxiDfy\noROPi491M4OyLGPdSP7jAkGpAYXmh6li9U7B4V4/OSW7aEylD67CIaBFVCwh\nYtxW9WnjEB19dkqOcFadH2xMAHU1C3mo+0IewrAxn99qlQL7LsO7zPlWAIGH\nRc5FBtpAbLWEVl+Uqgv/dqIJuhIaTM/1eggww0MI3iR2fuowlpIgFN35fJ94\n2SoMdGW5ylr7PdqpqACNV/8ykBXCQMBFpJRbcgnUnejRaFxnBk5u32rb4vD3\nlxNkp/ZYV4c7IbpVyu5E748abmCg5FMqgOz4XHEX8FmKg6iS+PJdGHkNjVuO\nXjHpfFHqngwaP2eDlu/Fban3+3+kcTd6kgNO+NHnvmhdTN2gC6yiC8elp6Is\n9rNYn6Jir8cWt1EoqDfWw7WR7fKc1A3p8WMxm0dqexoCfccEWk/6X5wy5RB5\nxw/LclvG2Ee/1HvYV7ZlmTrxrf36c01MZmkAWTcr2BprRm8EiAotwpvF2unA\nikgRO3YMeqmHAVx0kXN1mkl8FuVy5Hd00YgsK9VjOBGy6hW5gIJ+KXCSKTPN\ntAsSjfuQdO3fvNhntt5D+MQCJfrODkEhUmQmxU2fgo8sRQV93obRtvQLyDY+\nyOi7\r\n=REiA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYmCdzT3Or4czXdz8KgD5rVupxDiUZ5552M4pfs/IlkAiAKQY0DpU73G9Cdmhc9ymTfRX65yi5FAtCMBp60+7lGKQ=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.11-alpha.0_1584699535382_0.23759598380228675"},"_hasShrinkwrap":false},"0.21.11":{"name":"@react-ssr/core","version":"0.21.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6f92c563eaf8124f8134e252613ec48ba3248410","_id":"@react-ssr/core@0.21.11","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-oPJ/59QmvNWDAW/a9yp+vr/KP7V3bFGHLazZQrlCojSESl7IViD4bbe64eJzSG2lkZrc+XZeXmW+HyD9CpZF3Q==","shasum":"29686817295ed337fcb72b0c423cadeafe753b2e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.11.tgz","fileCount":42,"unpackedSize":533484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedbjlCRA9TVsSAnZWagAAGt8QAKE1T0QRxNtVrAGAELJg\nIJKLoXc8kRDtaaqC+9wf5XFi2ml7PkhwB84BtxO8LnAEVBbAe2jhSbduiLWd\nWhoPO6H1rAj08kQHV8tP6+bYFFxPezHu+EWt6erxVESQTrcjwIEjJh5Ds5g6\n38HBTC4IwBo6JY/x0llbtTALDu7aEgkSxY9ATHNL6q3CEUEbTohkRGYY8TCL\nHuQjWLE4nOuF+KL9Dtk5xa0b8suhE8seEjwCPSDZ+3iWE8ctck2Gjxv7/6zY\nSgjs5/MOWC8BQBFBB6gHhhWGWj4m+kfjs2fdir5qWBBE4lJMg17mm2o+u2F2\nbo8F1XYLNm2YTLiXYq2NCQhjwRGBO3o5kFZm1tijKKqmzUnl1VkyKe4XC2Ot\nU+x5MGfAEZAzF8yhHvXDGKdZBOw9ZMj14scF51u/T11lPLE2ItXsE+o++tTr\neT4OYoVKYr9OUq2BzULk4gGRYY31ls6Ctf2dGjVzhLgyRVtCP101cloq5UiC\nbaSWayK4g+7ysBqogprPG7icNGNbLH0/BR7UUAzVt2Tzy7y26mWs8GrJr/Qz\nYM/VA/dSNLBg/E72McfcqPcQFKehebzl/DaD8NjPEXJm1AZuxU0m7OSd3HXN\nDIfIjM614FGAgw9b5VwPe4PiH92GkCgGhuraXdR0cQ5BEgA3u/eZw/IdKVPl\nYk+7\r\n=QWUU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL10ofzgl+juy+Ocp3dfbxERnxok3W02JBwxet+oOLwgIgBT0Be9x7S57AJO8n+tSKtfSQFgltXMx5ap7Dt5KrczQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.11_1584773348756_0.07616507429928232"},"_hasShrinkwrap":false},"0.21.12-alpha.0":{"name":"@react-ssr/core","version":"0.21.12-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9c07a444758ca06b3735a3cf6dc820065f0b7795","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.12-alpha.0","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-4gzAdEHSxmA6kwIerDVWUqizpL5iAf8ZLcoqDseTlinpOUlCsFCiY5hkDrmG9gjASWXVMJqIEcyWimk4NCSD4w==","shasum":"c5dc704b5808bf67284e7abd82156c97ade24bd6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.12-alpha.0.tgz","fileCount":42,"unpackedSize":533860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedbpzCRA9TVsSAnZWagAAFr8P/2xz3fcnOBnpEuWXJiG1\nt9saHizevQnsXIAJrvCu5wYybO4duqkzUXRNdRYu1tjpOOa43A47H8p1BKnB\nPFFgn+un1DcgV9kXdKqf9bZrULb8sClZ6RqERtAdpMxpQLWc0lqGAJIAlCmB\ncJx3JoyCVNArubFayaWXZVGnzeC03qW4voRU+tfrz7d2Qmj2l2RJTM+azlDk\nLnbxpfybq1Nk6wCa04VpnKUqD15N6GsB9GV8Ssv8+VdOK/7XNku9KqtqDE7i\nqasc4LUUivUT8uS+6n5tWgezBReJQYSj7ZFDScKuH7WtVVGJ94twW444BnEM\n5SLwBy/I36rfqNzrrJU1RN9oSZu0kBGITskEocXAa+KOx1qHbg1o84RfQdnQ\n3rqgX2hnx1iUcu1mvwfFn8Kw4XNI2TOUO7/GUKXlaQjRUSNqnghIo8yXTP7J\naIWQyzxm7yItvptscQ4aqvHQDaJR4zg8Fr/+6C20FVdSkX4UZsWXrMc78NoY\nE7EVJoX9OhC9VRim/T/0mBjr0nnvPWM/WjfQuZBtsb/Uyr6YvQwqVfXyN56J\nsBLk5P0tSAzA2jbIzUlMq7905LQl0PTnfNWEJeJbvDcuL2UMtsGhe/hVUZrV\nugobTDnuoEnxiWMNkTt0qusvBzf0F/GSMWYfLX6FGnsyYr5j6eTdTAxDyLG5\nXYj5\r\n=ER4Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDrlqBBen5yuixFhWuvhNJSq+fn1BRZYRFq8AIKd5bngIhAPyPuGfD5RxlOhNdLwJ6t4YKiPz0KZMVjEQQlsL4RpJ4"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.12-alpha.0_1584773747151_0.4574397491058382"},"_hasShrinkwrap":false},"0.21.12-alpha.1":{"name":"@react-ssr/core","version":"0.21.12-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"21f14f84761179cf8ab185cef98037999ac6a654","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.12-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-PZT0UHAaFVOnYAtVKxCOH2VSz2bRLCI1ApvwpM16tBibKRKXA77qExkab3OAno7sUsuKC/gkoRcitS4fJwReIw==","shasum":"0d77f9f9d25b670bc42c3808d58b7e3f0400ca96","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.12-alpha.1.tgz","fileCount":42,"unpackedSize":533890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedbvMCRA9TVsSAnZWagAAtocP/RM7y/24AF88IgFUwh8t\niTOsUV2q8dUeLxVaUSvxxk/4rJ1b7wrw+h1IaVSqEWuvZp5aFSdktvqtEotR\nxAOLHXjGJ68BApt3wa0fFfcMczKeqYHU86+3XtBiXz5qOte/hCBf8vUrCUQZ\nTWi+wBeDqH+qsEeBU4hU0vROhyrCZ2ASaRk9GOLeQaAq/NOVtKPJ7v99CKMr\nawClYKXYeEYYU00qIyVvPcXEyqyHxP7YCmmExj5jaLT3u9qKAOHlb2AGwe1m\nyYbkikaIuzNbNCoHtKeV7OPbANTQPbWA23yqIAlzbSqEn41OwsQ6zKuZs3Xy\nHynxn31QtVUbUIioxkz7BFKCymgO1Z9ZpUBWTehsw1AFjNI9It3kuh1jseHZ\nZwP8+a3IqcSOYiaR+i0/UHhYq2kF3fjv1K8aTDT9BPRpnS4xOQCXVMQoRYTa\nqLIgLrlKmehM3XSF5f9somQBEFiraIlrYiiRsK1bFPegzPLnumlRdHjB9u4o\n1rr6TFM/sGDeHppOCHGQDiYK/b1vJ25DnCh3eK2c08u+iLiySizzy3WeQd2D\nVYVT9GivERsvVviWA8sdpPem42sObsskqdj0ZFD51z3r4I8htlIULOEcNrik\nT1h3IvmIGMxo0PprPdkUSl4djTlDooRppWJ62iFlg4/FSclt6b0IqT93h3Bu\nFxew\r\n=G4Rb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRURfpY92DOJczh8QtM69WmZlq8MH/x+gCS+1nx5Br+AiBHhOiuhEa7p+PTe9mR56N92pAK4ThYXY+8I4H1xNQecg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.12-alpha.1_1584774091907_0.5177562505210029"},"_hasShrinkwrap":false},"0.21.12-alpha.2":{"name":"@react-ssr/core","version":"0.21.12-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7aec641f77d0c0c311091276dcf6d76a40ab68a0","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.12-alpha.2","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-ro/tIYuY4dg/QBlX6XXl3KfRIhc+NzZT6Sf0EkwikFmgu7wYmj0TT9Eq/QaJVt/Y0pdEBXafDRsrPp79Cq8QbA==","shasum":"fe1f7fce37ee2e28b8db143802c02a7c38f4cd78","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.12-alpha.2.tgz","fileCount":42,"unpackedSize":533825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedbxZCRA9TVsSAnZWagAAOQgP/0hUdaUIMkVCes3gIrjC\nE4xxbtWYJuol4v92PoHaR8nKg0oGQaMJAalm8m2Nj6fEcjcKiR/sWB4Kiv9o\nGDQm7CbcQBi+9+hIMLdSi5LrgJmW1/i5TqfoEUDp0byjAta35iA+X+0HqLzU\nAdSYYnsLLXThUl+rT1nIb6hDLClvZv6Xq3hnXaPOrYdMuLSGxKKWssi+oQyK\nW01NukjpcdJwo35CYwjZy8bW+M6QfZnexun/3zOOiVF/2uq20jaOry+GsemM\nYmtJru110k/bIth1RRyO5+WAan2ue1Y90Mq6iugujZAx4Zqo+Z3mfgZiT9XA\nZIAEjrr8qw3dHeTC2pKlGuOKKmc3O9mFwx4NhicaxmCf45sg7By4LJw2NG3C\nYjYNnEm0tp4eDIDVnBUpKLJ1jUjCQx8a+OpjmDjzO5lnZH+vy+0eD4gd6eUq\n90Ndv3sPcWI6giZ/ZUuKlTq60T28cb9ejELFwEDg55dQ0QV3zuvrWwfBmDWP\nyoVSk+9YKEmI5Xfu0KPD1l2gjXM9LB5tPYgNY6U5SXvpqVkl1RiCLjLhYcvg\nEUJalMi6Vk9iZFeO+WlLvlV7nfxtKr6U9PmlqNII/sK5w+Vs2AEdpAKx+ZQg\nbHBvAZSbcpU1qtMG9wH4W1+FF/KwD0EWuRG2GoYyErLUV2Afp242/y+FP5w2\n+sZX\r\n=2RL1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2vq/KcNZGG7++x2Rf3TqatT3wY6/4cpr/zufGFjErngIgEge63CW17IGeZ2znkJ4zKo+H/HLB/b6BY4mba9QSos8="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.12-alpha.2_1584774233325_0.3460961792876771"},"_hasShrinkwrap":false},"0.21.12-alpha.3":{"name":"@react-ssr/core","version":"0.21.12-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9cdffab9311b6bb05e45c585a8014812c6b5d80a","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic\r\n  - `props`\r\n    - Passing the server data to the React client `props`\r\n    - Suitable for dynamic routes like blogging\r\n  - `Head` component for better SEO\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n### With @react-ssr/static\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/static react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"dev\": \"static\",\r\n    \"build\": \"static build\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/static/babel\"\r\n  ]\r\n}\r\n```\r\n\r\n**`static.config.js`**:\r\n\r\n```js\r\nmodule.exports = {\r\n  routes: {\r\n    '/': 'index',\r\n  },\r\n};\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index() {\r\n  return <p>Hello Static Site</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm run build` and you'll see the static files in the dist directory.\r\n\r\nFor more information, please see [packages/static](https://github.com/saltyshiomix/react-ssr/tree/master/packages/static).\r\n\r\n## Examples\r\n\r\n- **@react-ssr/express**\r\n  - `.jsx`\r\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n  - `.tsx`\r\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- **@react-ssr/nestjs-express**\r\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n- **@react-ssr/static**\r\n  - `.jsx`\r\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\r\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\r\n  - `.tsx`\r\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\r\n\r\n## Starters\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.12-alpha.3","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-CLMlOKLG8W9aTE8VHdfMtsBfcHqEaOdabmuTqhnOP+e5Vy/KGieDKdIVH9eK7DgZ8IkEoUQwqB4RR22gh7z7Cg==","shasum":"454ad843a0d2ef8a1e6cc40626dcd1a12984c262","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.12-alpha.3.tgz","fileCount":42,"unpackedSize":533793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedb0JCRA9TVsSAnZWagAAKkAP/iG+BfDrXB2poMl/TcdA\ne8aG8Wtm9/oB2NY1mAW95NJfiunHntb96YW0D9EQb3O+yCnUq4/dfWsAC5LZ\n6mJgVG6gDoBA/LgN/YvvExwrKZy+NDKIL/TTnuP7HCEmoRvHJLjXZBWQ03XE\nn8oL+wEPl/jbU3sm0CceSWi9hiRZ6rCFT8B766qlElS3CFz7VMRBTgIpOCDj\n95VY3Hqu3Wzi//cNHMRe2xxQG+msSVoBeBj4t/cfmF5HTldTJdUBnQcVwPQW\nJqsYWzwAT3mVKCRws+mZT05+54syqT4CHW/PwBZhQtBVgdLQwZhp1+MppmNH\nzbVuL3oBSbgAMaVDjMtcSEhqJ/j5taorIZVsofspYwyfdw9fr+c+Z2wUdYUy\nJPPgItJEwIqkCtG2Lu1fc+48y7dWVvzvenPGDILeeCrA7cOsQi7g939TJEEO\nQidoHCsns7yfvJi1kWZhfRiJFcB8msPxXcU3WX7lzID1Iv5Ak8ZtJkFjQQko\nNx4s2K8vL1PmOO19iR8Kfyy4jv15xqHMK7Hq31NC8sG1Lhk1+9TIXo1KqpBU\nfbH7/33mie99qqF40sUGzgey7HGzXGGpOwNLOdkqgcRUYLMG41ViiIhxvzLF\niN/frpQxDazmI2SaXsl5fgttuWckJq6Yk2szJzGG4e0vTfqY+LeRbkeTIH0v\novJy\r\n=thi/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdMkilyOHewHo2UogM2Awa6z7ufvqrmVvlPlN3VJGWxgIhAM2TBpr6Q/FXLGz7f/nSU1gUIwajcDO0YFNM45dDKMB5"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.12-alpha.3_1584774408807_0.6392032876218683"},"_hasShrinkwrap":false},"0.21.12":{"name":"@react-ssr/core","version":"0.21.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/register":"^7.8.6","@babel/runtime":"^7.8.7","@babel/runtime-corejs3":"^7.8.7","babel-loader":"^8.0.6","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^8.1.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"d146aedaf198146783f3c122a94c7f7e41f2ed2e","_id":"@react-ssr/core@0.21.12","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-9h/dUttdK6GsGRstj24Wcrihry4rM8frGm9fxwK38LyUvEbX2uSLpRaWbxjtCiANjUhCnif1tgv3/Lu4+/izPg==","shasum":"fdebd1449e9912b02783387a80617bf1cf98fd3e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.12.tgz","fileCount":42,"unpackedSize":533777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedb3ZCRA9TVsSAnZWagAAcxgP/ipsLvFCxH7qSw2GDKTO\nPe600hcZnjf14qh7yI56TnUH9FW7AesFZqcBykTE8QYVb7lR6E/iKtgLHNWG\nbR81JF3Bj2rgovxjCtnr7CWzIq2FMyMZqDp1rDZdkbmO60twWUUSwnlm+FOR\nxAkxvZFML8gvnxuKMPTWWaKdKBrJEFW+aGSYrX8sXPLi391mJMHAhjuqVzgt\nD4Xc0eSx9Nernu6jkUW3M7Dh0DbBsda+xQBxsVj+GEnFq0oVI3FyiQmpwAse\nBXN+8KZcGUVxkXdThEkIazq0uTMjM39ayPBKggjHVMFUsGIZwMAFJjRzh6yB\n8JkRsL6abN4GakN94C7CaOQHdAcPhy1+oOY0CApNRJZtugxVpJbkoUPLGa71\n6dojtQnJ8Du5lPnXf8IMn+P6SR3ZgqgZC+5XpM9nigxeyIcqt+UWqNFONXtb\nlCjnadW48z3Uz0ZlUSKFgkne3FPf9pc62IJEkPm4+VfTlsWy4X2WcCJT6mMh\nKNYs/feAXZwC2Wgy1Fi+V+FMM3HH1iL1j8nubLupcVcKahyff1uuT1LCUzG6\nR3UmDAf40mKCn3BwEshCuznfxjvLc5vfamwjvR4NUpCZ4uBylm1G9mkypj0h\nsY6nhWq4osR+HkDWyGwYnpWh3uCEK84R1WhCcah9THqvlXTXl3Bh92iUnj45\nrXpU\r\n=It8A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFjyve783uLe/9efhAVnmxMwvwkXhEqAQt7K7gtIss9AiB+ZP1pbfyXMv9dpoPj2tSgTsrzbzFvpJ9eeerWk5wHGw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.12_1584774617190_0.7904737071026804"},"_hasShrinkwrap":false},"0.21.13":{"name":"@react-ssr/core","version":"0.21.13","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.1","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.0","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.1.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e3d9be1eb41b8972cc79bcb16c03311b6df3344e","_id":"@react-ssr/core@0.21.13","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-lmURnPnewYrQ8K7RH2u6EUBq55NSP7GxPJs67JEP6bqA4FxcIIGuB8S2WOp9oj0Ix+FytQ/9EdUIDJG6v7AOSg==","shasum":"ab1d96617960949e8bda594ac8be03d376c3a5d4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.13.tgz","fileCount":42,"unpackedSize":542264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJed7LxCRA9TVsSAnZWagAA7LkP/2covG/FSn40Sj8Ii2+p\nZuU3d0dNSki5MGTkM9rm8o3tnfo34VEecXc5Mkl3C+hxM8tgZnyeAk/wEFVo\nqWHll6xhD1rvAk3EurIEv/E7ipUyjs9Vla4ECnvwIa+zztEm2mkWEgAT3/+P\npzZvsYjIFA6nBw5a0KhWfATplAp/P8Rt710Ek7Ge0S1VYQRfUteRfkIyIjs/\nG1QDvCxI1VX9j6SWoJM8VEeDXRV0Xc1PHto6EPbi+9lAttJ6WaAsS4V5Xdf5\nZrDDfnlawY0UTGFLCj2J/bqGLrgMQPKEVBMu4CKjdlAC5JujgwZTIlYudujW\nogP5EedabJzfrY9nH58q9HJk/YRozsEw+VAj23qSj+15XEpunl3op64AljPo\n3s1MlteOfYwtUCqGI5ttTfccppgqvQNJGZilr1WgjTHv5rU0wtvV9PoLNyGi\n+clxrXedPbUdmYkifXiYaIa1K2rl3gRTm/hYN5p63ZyDpqUHnJ17vYe1nq9Q\nUiJyVntsRz0FA69Un7gKW8viVBgi0h+PnLSnZHoKnhaRTKL1eIgxL/bEVmoN\nvy+XNkxjyu9QRRfuIGSjsKs1WjsRqueapOyZSz8pl6LDflPJpv4+K2DEHJTJ\nMOZaPpczpzRahkNHnpCg+Ifm376ORcG1YcXGLIfK09WnVb2+PwfGuxpcmkfx\nTsFT\r\n=aydJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnjuUL16VoDUut9M+JqymiGHp/WqzLg4iL9QxukAq3KAIgc8V66xLsDiUHGRXkGagJX3Xbrzqi5qUVVOPoZR4u8Cc="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.13_1584902896908_0.6502253087061252"},"_hasShrinkwrap":false},"0.21.14-alpha.5":{"name":"@react-ssr/core","version":"0.21.14-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"303c3398e22ef79ee432eb1743cde56a8c8e23e0","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.14-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-847nmbqAVnM8JAadaetR+J9/0gw+ktU5c5KmGsmoQfIPBg3rtZIdyV6LX54zIcAvCccFffqhF+mtxK+YL6L2hg==","shasum":"95e8f3431356efa035a22b455aec1275f3469db4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.14-alpha.5.tgz","fileCount":42,"unpackedSize":542279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefHd6CRA9TVsSAnZWagAAyV0P/R/Zuapr36E5Qk7tJOqy\nhdQWTw77Ty+3xRiy3bj/K46//8FzDPFi+PQl7mXoc+hCHRcFhcKqKjU3pLMQ\n2gs+jio3e5m2MC4sSEQhiHebs0yBygZMSYGdHfowVCRxycE1g93B9Eg7NHSp\n0gVut0YB/0lqQt2TpksfOM5rgdkel6rAOGGU6ARgeaJoYemOjxaYOlX3uOxn\nhu0g6NLvebSLxEPWUaRST2BiVqzvmj4YZRO5YIEoU2WORizmbSAzTrL13icW\nGt/WsfVlgq9HU40vrVmA/I8iI2dRx4jDoV3jpHJgtPppTAOEzh4788x/sSpr\njp0BniClpUPtdlZsNrIOSmJ9K4rvyoty+pyii1AyKfU34C/gdMVGEM8/mFVq\n17MG1VAsm6uFduWXC6o7hhS3qPe3pyOioSgKNtyUcWsrgLj6v4qj0xoSYLHX\nrKHuouc5D+RXTonVJIE0n+WDnigq8wedlyNbtVwWaPXvxc1GX7fwvVgwMhBQ\nzZ27t0cYzbr/B7uKJOpYpLlTsRbW6MFn5ytzwQa65fapP6av5MDugGB15G96\nOLn43mTKgDjjVt6SUbUqQ28nMUUD1lsymcTM8DQkHnB23No2eW0JDH08Hue3\nR5S+KBZxIpwwMC7zzIEOpJQuQw2slj4j3FBYCkxhbwCRQMHsjsSXf5iXIVfq\nHwCf\r\n=YeUu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBi+hiV23YdzBhtDtA3TLMgCvfcpnvqqusei1y0JmdwAiEAlsGohILvsK/YnkQM18sh783IBd76vNO2lAAGOQIcaas="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.14-alpha.5_1585215353652_0.2714233120128693"},"_hasShrinkwrap":false},"0.21.14":{"name":"@react-ssr/core","version":"0.21.14","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"e4399255389d9eaabcd96e3d8ee7d3690126bbe2","_id":"@react-ssr/core@0.21.14","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-qsAbupLuk8nOqoiL0gi9HYraZns04An12MXFRDHzxTtxkf2AOHGttoq6WmClSIhjsSB1FYGNSz53XPUj+yOx2A==","shasum":"e94cbc485e1cbfea6ebb4af0a3f12e103f425612","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.14.tgz","fileCount":42,"unpackedSize":542263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefHhnCRA9TVsSAnZWagAA/R8P/A3Vl8nZYXW4279DeOqc\njPjrTyhUcb9/E6RQcoZCc3fnFS5cfLRk86UeOo695iXBpD2BLDaISHcyx1vA\n3k0O89oP1doVCwc2rH2BE2P28d/7PQyQQ37h8hDwnLnZl/54RFORtXuW02JO\nnENJAEr460E842RINJpRKeP7VepZ59Hq1IPX4ahQ86NRVvYC1qRYu9CN9PU9\nNdG16gbLxZPTpvFunyCgf8Fs0iEBUatCZ0vKYjstZX7mN+Wg+pq63zpe/PCf\nw1THFmp3DPOXHS0g3xMUPMJtlTZtpYHOMPhD0/E/VqdzQpmDEKDyXelqQsQA\nx/3ZLgnFAM+ywvo90N1Hu1+xEAe9oxqtzejdV+CISH4cjufQM4WxTSqZeKgv\n639Ib3y6YbcXF1cNGUl4WiTL7b0ehi/OPRDWziOx4prCKLpVB4gU6EQ+YRKF\nthUVKNUqzMVsdniITSGvgZJYmiCDFhq9I/CAqc3j/zn4xV0V9eRxdIwXtJhG\n4vYg1HXl7OyFXLWwZu1ac/Pne0oimX0YllwcOzvUNsQAthGOjk0FHW1Nw6UM\nAVELt7ZaRnkYFF3mrvcPjicIMt8GhtEHifyDYUjGUVAEdnVWBNse4oXNpuIm\nc+mXfJ3hNUL1ltzd3JQPAf/9rOduXqLnwSS7s3Tm2K2nCh0EMhqIQ1N+Z2ok\nKDcL\r\n=HZpI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCclT2a4T66aRBCQwgGxbyl/JYJpl3oz/WLHw9Bt1Ms7gIgZUacDT4nBx9J68nXeZqIPGRHRpH6STjh29L0UBWVc7s="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.14_1585215590718_0.3202947154673139"},"_hasShrinkwrap":false},"0.21.15-alpha.1":{"name":"@react-ssr/core","version":"0.21.15-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8cf3f31f5fd58df0ecd40c91364e80aaf34fbba3","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-NN0pCCFpoBot3Ev4czducap59rGZDQDdvwbYoMWPCX6grbBcLLFt511O5dpJDTZjcTej7syE8zooCj8GWIpUWg==","shasum":"9f2b28061d2f6ca1afd370cfd69b6c12e92c7738","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.1.tgz","fileCount":46,"unpackedSize":543237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQl7CRA9TVsSAnZWagAAqzUP/2yZuhonOfSzLLIKstnW\n8q7E9RB8cnB+WBKw8DeJoD7LaHM+UKpjB33jWBbYp1f5jIIlGghfqRIJcQgI\nYyYFtQk+RVnHRbzsadizfvNd2p9h7N/4A2xUAzRqLCUoVPCD+InJor5LgvIw\nQQCB6pJzsKjxYY+q0Tgsiwm2iHu8PIPChCiE5nMjSUI+NG42hRgDJCviN0nF\nfZ0C8eAxi6vuUgqxAtJjgjEe3TEMrMBMtfS6eg8BOwWngZTbQwNwER2v1Em/\nbzWLCR/2OFDYYz/hT1eFyYzFpUeWu4lCwTGVntqYy+rI5/ligJyv+UltNbR0\npd+QOHjA4tMWsjavpqD1pIpP4sW14smv6eQXnBOR4mP5X4HBNqxE3Jx++ymm\nAPvBkmwsT+Dz/GuL6vE3lKt+7ZCNjNjw6okMhGso9xfi4HBUjWoQgpuzstu2\nEu9/ZUIvQPVWiq0F4TaY6e0R4MtM6Pm+M/Xufd5F6k6FB+weLTgcL53pk/dQ\naTBBGDgNg2vV+uSylHrh6k4rIKXrxSQ394amK/AF1weEGwpm5ydQPLTFm824\nbeqTAMPSKUmpnI4u9pCNwSOdKz/8XG6j6TNrrwdNs9tZ9+wLya/Ulgi+IajI\njrk/7oFmR9jCKkwHE9Nduqb04wph9WIm58pqpm9mhh3vm74mv+UagzpjnSyx\njCsl\r\n=Uwac\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdnz5kZAKfnrGl9DYUFw6AJ9mVX0LMbrNHasvYCcmmGAiEAq+sTshIkYDr8Mdd3AnvZ/KtLOC0pozZM+iyNQw6ud3s="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.1_1585252730995_0.34535233107243113"},"_hasShrinkwrap":false},"0.21.15-alpha.2":{"name":"@react-ssr/core","version":"0.21.15-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"009b3cd9c8a9441617cd01d371c3cd539ef55858","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-bBKAgzX1ea/3nT87T0dP5wYYrc364KG72AyC+qPsWylzFoUM6llub7Y/L9FnICuZbf7GupNa5/WaFuhdxdoCjg==","shasum":"ad5d0c74629f697c5a0cafd3f0a03970bcf0b60e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.2.tgz","fileCount":46,"unpackedSize":543267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQn6CRA9TVsSAnZWagAApUAP/AkXjLg78FwOpe5qVbYM\nooIyHuHtF4TzMY9a56afRdx7gHoM46KBrDfncCMA4yUpnv+jx+6S1CwLh5le\npLl/CXiiWpDhO4EPvWdRPliOBbXPR/LgJuZNf4OqC4qFWrIyloS8kIWMG1XG\n1ae5u8Bu6IsEog5RysRFrOQZoBHyi07dvKpPikPYxFN3KuD7vv3nLGBCtasK\ntuDEsXbqIZP1R5S6eqcATC6thoJzgwatX9fpwSI9mR3ATXt6YBQjaJHJbD4F\nKPaWKYIV557yVgFrnxJGTswUytDHMmXpql1BUTEGMERNsXfpEh3u2nJ/DKCW\nLXk6Z6T4xrdwkTKeKYDqzcvZzLb53fgrapIqeYSdCp/vtWNq10k74VypumGM\nQU8pImNZMftSlrs+CVubDDaNn11nBum7oGoS/gZcjf2rbr1as2UD+9UtJfwO\nobDrtVkBSrJMSSHdvOWbryO+XqVCmLNDiLWG4q5kA/lmrHzLw5EVStrce/8V\nh/mWJiHqeDdYtxXOqXq/lIQtUH6DhpZ7zR+AJ0xND0mTmMPf4SEceJAqXnQY\nXVhaYEJKE21mry70/3p0KewmwVh/SQJzaIVNlcLapIWtfZ5/Rbv2q7928ILB\nk9x4qaE7Gnqz3pZSNyP3YGruDoeqs4siDeEAebStQ7sEMfHN3rn6/m2mjpmy\nU/DP\r\n=7C0g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChoopLcDd+NUx0ESGEB8BTfZ6Q7MLVrphV1uv31zUqOQIhAPEl1SBhzIGGseA7lGB0oboiFa1CNxK38Ac5SDUYCgjq"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.2_1585252858285_0.2341871505363231"},"_hasShrinkwrap":false},"0.21.15-alpha.3":{"name":"@react-ssr/core","version":"0.21.15-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"7f5867f620c0bd280deb11c8d70c68ced1b4bc79","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-RuKfiA6f1Qz2mZ1464LB/C7gkNLJTwgbX5T9fZXyr+avcLjk6t1pfcZ6JqPZ6Ex7GRk8qufCxhvc+kNDqCqytw==","shasum":"f70495869b3075f44a13ccd9f798d5dd26eb447e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.3.tgz","fileCount":46,"unpackedSize":543277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQptCRA9TVsSAnZWagAAiSYQAJTo0hRHy/Rvm96TRZUL\npeJ+mZp/mtEdso/kRtbrCKfOgZnYgFVJjQvUdAlNiMy43+vyFKyh136aFvYR\n9+vOs0gDpqShaEliEGc2KdchoZ2Vhieo3CvIWU2XU3GLI3PkhOYUUMWwMv4B\nRt8X2nVGU7MG2jRiLMO0JpsAMNmLz/9tq6pvbE9NEyQPmDrTpQoC3b6o0PDL\nw2Psbz3zLlpJvw+P1BPnE/gFoGSEnbbg7+88xEOXDhDy5FsnscGnWhfBaSKH\nqhIqoR8Q5AtxNwlQ93dOrzbvMfwWBKcZa5J0iQsyXZzf4mib0Xtf/KL/nxuE\n4glZ5AIRr0OQ9Oj7RfIFnVkiBtnrYHDA9SuLg4yoUQhATT0IA7WwsFBK9qEp\ng9RBl9GhS6rMOC+5g9zYcFtWmYRsHUXWVcMfkBgO2JIAIM7QiZ1Sc9KOXS3i\nr8nsE4p3+iKB7HTWIKiXiPBM8CpUjb9JQtj31Jd81yVLQ4cvSDlFzpRzmXYG\n2DCJpKiMrawyxaMLAYQbgyuDQ2lueKz1oUuroFAgO3x/0lqnAlpq0oQrP5zF\nD0GxQ+8xHUVuLS582/Eae1e2HNxkkG/1a1bt305AtdKBmWKkNvPSWPTIp0a1\n2LzGCRC2I80IIkCQW/Bj0XwQAY9xaCiK1UkPo2EuKJLn/HVhRyqyWcBq8dR3\nTHZt\r\n=a30X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIArQeJS9PE4cyycYjPUbk/JyaLbbyQ2IhV4Po6xMNMHjAiAyXq/lF5MOtlzgx9/QDYSI9DP88tWRqkNlZIboFPJBxw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.3_1585252966592_0.4705371002307628"},"_hasShrinkwrap":false},"0.21.15-alpha.4":{"name":"@react-ssr/core","version":"0.21.15-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"ce0d814c62f2aa5415522ba3394673993f6c36b2","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.4","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-y+r2nLDIBDoXNdMTO6kR/lH7zWk1cmcNrt5WiPE8Gz5QHmpMkv+jSiFcWu4aDjgxnk8s0+KnXPCkJdPaAAnVRw==","shasum":"3deefb3852f0e19719d14011186f37d7aed2332e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.4.tgz","fileCount":46,"unpackedSize":543241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQuiCRA9TVsSAnZWagAAxTEQAKEaLzCC5mNLsylQr1GM\nL2I1KInGWPc3r65G2z0R5yGaFQqQqOM9T5tUagznJjpWKkuiadh61SqwidtY\nYjJEdoo8axW00HNeNW9MoQ9/XBlICZtkFGFDy4jr/IcuCuSrFCmeEkffWl7S\nmF+h00Tr1BzxJ/WrcEaWe5WSwZq3sx2ibL3R5gtVGYp4xfpr7mlObZJbvoO2\nnlBASQqlo9Y8vTwiCkMBsqwkNc59b4UJBiVDPmbSqh9yJwdJUdODC3CFuGtN\nocZqnsCQfNZpwxm8pbXFFsIMyV//xHxcyliTNxYgEyqPK8mFN1uD7NgnxJ+C\nSn1vJ0FtHKVWHzpIaEaS9g37hhb3dXRQmN49J/Pv3n3bogdIMWyGVFGsJS6i\nhDGABUPz8w4r5oHfszm4qB4fhF1ZElXt06ZzQQRmFWGHpSlGVvo9Frz0YdLS\n0MQaQuSTqsVHsbmp0W+2wI+gKNn4FKm6iHtqBkb4D6D+Qj25ngJTWiLnG75L\n8DppvapvB7vBt9UQNv2d6Dx0+WfJSRlbZlS7z9l9uKm7c2c2tpdoiHRPMke2\nG9flAKPLlPSPnWWrCKYVvfh5/BdL8ihvYFBqgA7gaWUVkf7zTJ8KESQ5JZLW\nPeIz6R3/NYHFtHHp0QpMuyma0qzW04l3jclUhn5p8qgExL7uF7zolGY7YMaI\nlAMd\r\n=SgFk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5kF/13JrYV76rkgJz3hKB0La6AJGytnPEARsooh0OlgIgR20M8dP8LrI5aAn4ukbhIAPoJfekH7U4ImaEbarRcng="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.4_1585253282191_0.2954415681588294"},"_hasShrinkwrap":false},"0.21.15-alpha.5":{"name":"@react-ssr/core","version":"0.21.15-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"a8f5070be6080ec79dfd0e46ed2722288049f4cc","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.5","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-DI+ISja9GwZc4U/doCDX4ibGkAXStv5/l6D94YzkiJABRBEKdDbzs4y6NJebJpFIDe/vPlWuKUBQBsPvErCgoA==","shasum":"19d8aab40652b92ce2a5b9f6b560f1747be22c80","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.5.tgz","fileCount":46,"unpackedSize":543221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQ0UCRA9TVsSAnZWagAA7+4P/0Lf5gCHHMR7ZCulBB8O\n2+IuQ4301biB/CCCHhFnlF45FHv7tmgNzs2RhnnR2Os5N3G9++DBzwLaWnZM\n4zWog6gL8EP6vTV+D39Q1MUmfY+AJj7eWDzHWk1KtxGOnEDgvLhNu02v3Y9Z\nzLCuOaCuZLy/1D5ckHgq/jCj1yJhBtbUPN+BN8YU9tceR5sksc9rQGTLyoOt\nPwXUhewOZQt26KJgZwoOVkMfMXJfXb1WYGXm8WbU36yem9szvVanpDsN8y0g\ndNE2S2kvbOKBVcIaKIhxMTMIjszALtFAeB4rBrw30kk1oKiEJvpe2/i+rODl\n+dZj2o8XAc+R1jNYR9lVUJLd9ppReyq73WdFOJBlbOWU2VBS+tqH/4/Gkw50\n/CzCiuIh7Wzf4vFRtV+337sMGRhH0b93miRHZHut/rEq9AtPwyky5kNhS5vq\nxpcigUf59SH8YtIBPjAZ++vZfDGWcG35IKmexqw0sTLYjh395w+6XNdcl3iE\nEDz6/Qsj9TBnW/coyPutDnxZzb+/QRLpwt7hGNsvJZcy28GpIoBIaTCTFzr8\nQDZw2p9ks01OtGUKTkdt2bIlduGmxmMDrgWTKBYm02eRUkjns3QYGhwVEkxM\nMgk6GSbjybps3JSY3yjMqJ1SlpT399/0ct+NiVP1inHK3y7m9ppwABW4a7Y4\ny7Bz\r\n=cC0v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbolin0RIlSqfdAekDfWcM+Rr9cUZ1oxlglemYK6UrNAiAM2O3MyvKjBJ59/LgfYNG54I05DrF2Bj0Fq6gCpCF9RA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.5_1585253651851_0.7162882082113464"},"_hasShrinkwrap":false},"0.21.15-alpha.6":{"name":"@react-ssr/core","version":"0.21.15-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8d2321043e4ef74a1ca9e36e0fb3cd5a7fab0ec5","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.6","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-WpI1FtiHzI03PDV9p42AHckgJMBDZ9ckv5D9uidkZDXlBO4ncGr+QimmX7vFyrG8ZbdI0Diw+FkVf4QxjvUZpw==","shasum":"9f6992cf41780c417996dfee92d069ff9085c65d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.6.tgz","fileCount":46,"unpackedSize":544038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQ7FCRA9TVsSAnZWagAAbq8P/1p0NPn7J5lNMGduISBH\nLC3Z7QJcmjqqqoiCIIRSc1xGB8a0ghpWNVOlQRqY1UWxvFYLwG+NcGX7dRSW\nzBY+kdP5BXUVeiginsm/UkJBGZdWLAFfcU+G+V32fwAFzYUVOJIMZNVmuCrF\nabqeDWkJmRaPde9/46y36kFOKEDzbOKINDKFjO/jEvXCqvI3DYpVeIAT8xYW\nAKWrjag3N60W8SVNSNX6mXJB/9gsYuxkPxVPeJBF13vp5NeVZbFvNVaxlVD/\n8roD2g+OVurx97JjXhbWUjToNkN1NKMBdXtdsXm5j4GJ+4BGiy1oSKTl9bFI\ndqEJeHH6d7nNPTXrIW8VeeEKsSIUR/V59w/jfS57ZKjXRuukH4QuOIok4bSL\nRaTgutT2WMofnCu0CGqfyE8Qeka57bxshQT3XG551TSEMHp0/CqC5j0/iUEK\nUHWiLl+sjEL+flTA2rUajWrn3jqCMAmEgM+LotRf0Kc2hIf0/+Kr/4JGJzP/\n7z1PTlzL6iUyc6gW+QGk2bbozHe/c6I7O/QdVnoc5cg0xtT8wLe6Gw25+61U\n4STxOYxsN6BIfCPKsba1zbqfLsheYac3Hy15x1HIpMjBCvTVe5yB8HR/iYfK\nOqvB4IVSC6sPnMCcorx8RR5N+Ga6E51eCSJb8gFP1QAdYFCsoTXxritTLKXz\nNh8f\r\n=vQse\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIECYwm5M+/BMjk3Zjt7tQKGXPrpdCHIQbhaxLJyHJV2jAiAY8KpIvQk/odq+eBd1IabrekN9CY2Qd6VnncI1bQFlOA=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.6_1585254084372_0.21749723367322837"},"_hasShrinkwrap":false},"0.21.15-alpha.7":{"name":"@react-ssr/core","version":"0.21.15-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fb9689333efcd6fad5e1b0031ea93116b821601a","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.7","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Wc7jLLXIBdr+b9qY1Um4JHerTo8OKNsGtxNk487mEQwLuWUSr/TwH8sm5Tu+GHOmBBEQRXLWqwAXuOwp/TshsA==","shasum":"eff3cf60dec870f1b48cf7a020489296871b0394","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.7.tgz","fileCount":46,"unpackedSize":624727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRCeCRA9TVsSAnZWagAAjYgQAIniPwWCJyt+Tmv7USzq\nNkrN4bbU9jK0i3EuRMBPgDWiQcnIwQ5JfNbWXTB2QerSa6CWN0eZwER+4Dof\nrl9hG8u51QASw6SJp1Czr6QnMbhk0Blgi07B7rJuwxlx4v8WWAQkUMv4kZCk\n1FPZpaa4sBeBe1MSe2RCjALZTPX/3otajq4veCY0GioS5i8/V6ti9qHX389i\n1mKObjdqnhj8BWZ0s5ZMieVSxAxI3+acBQoD+YjG7RjqxvlnsNo70SyK8Few\n3xpL2YZcCsaIVvTbN054HVzL5S1rOKnnp7DHBDxPGr1tSBfK37MBOhAlE7ab\nlkDMeG0GwoFvoYIXr69MF85I4WPnodPEBH6Sx0eXwcW6zvf7p4NWHwXgl4zM\nrhxFRCpoUoHqfbK1mojxk8MiUXBe69W4JVL54EqUeh3tZRwEyW8mAV+VjnIm\nuToqnpa8CKypIEYv3t2/J7eHqwpNB4s101VYsgISTOCq8DwnBBypXrbOXkxF\ntp5cwNqlid14RnfUBJkdzxhIeBtjnOFx+1svqjC1Fcb6Si4s/CMDTkHlN148\n0x0RB3V+hYfXHiHvMmJHsHXFYOrhOdwTl/uAolet5+lU1sUY7QEGh21C3IPp\nMp67n9587NAOkopkf72DRIXbwP4T8Dcvx6yvXdxQbZomeS7TK2gXbcUibHWz\nnOG9\r\n=8Zel\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHB5kyGz+bfB7Qtt9Hg0vP+0hkCNb+Ye/SDfOF1xaj6uAiArP0dbl9YPN0w4+5ZB0O3wQ3NQqAbQfwSXPPtMvYLDrg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.7_1585254557838_0.09089546230302381"},"_hasShrinkwrap":false},"0.21.15-alpha.8":{"name":"@react-ssr/core","version":"0.21.15-alpha.8","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9d180c7dfbe6d5e12a7aaaa870af34eec732bc6f","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.8","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-zWSjrRI2N49yX3s7wNutUf7/70toFe4KCd6gRVVbNYxhJ7TYffcxUjaJs0Ru2F9+GZ0GYaWjQGlocdNcFFdvFw==","shasum":"dba8f57d08e29f0a6cd11d4f01834a7003af380e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.8.tgz","fileCount":46,"unpackedSize":544950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRGNCRA9TVsSAnZWagAAB8EP/0KzGdnCPCWs59OU0XON\nXhuEMRbjDCiFQ+fd0SoZs+Fgf3J1bGtM460d0JJJFbeEHYSmyw/n4pApWr8p\nHw2w2RZedknwJb1qcGy6PgB56clSlhzUcQTa+lVGc0LAJ5loZWCmOasGPPGt\nkfABh4bPY/1XRVloAKQT4PcVqDYhzpSjSXjp4mTgWz50d5hQP/XBYR5KxOua\nWpvke+OkPdJKczjsl+Xh/h9BibdpCJYFqXQyIFBMSWD5V/RlrNu71RQj2cZG\nlM8kYVwxv4EhBB1P2F6B1UtRkAJ6rqQxWiMUzWPMvEG9s/MjiWSDfASH4JOi\nMaNN2uAsIu8zZRsBUG3Ns2KskXxGRCUrRi8VazDl4XTuGPOyOItFdO8fyGEe\nqKDJYs+cwtiMqk9Hqlbdaeyo9MU0UCQZoANTQ8REjJTWYyJIwAHbpqaFY4QX\nVYLonbCp4g2HgUkC81MVtVzKGqGDpCIn5lhxwhxcYgBJoQeu/s/dnyE/YGKB\nWk2iSGJuZZ8XmRw6ztvCE2+seEFCF/yD6OaESp3Bc23KkzEuYoy+GTIziqQm\ntFwsLlrq4pE10X9yylf8BXkhM6Z4p/TztBsTyIz5Pf/thqDcTpnEhVqnDG9u\n4F8vlnwdIezqVq80P2u3enNDHaTYMWGbSKmWh7EZlXzFendcg/z63JzeWd+u\n8N/s\r\n=NQm+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhSrFv3j7c2sq7R4pHCeewIfx0XWsAcxOXBzSjra923AiEAqrfhjq4ydxn1rIL7dG50SaE7Id/5Yc4+V6+5/dmtfEg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.8_1585254797347_0.8860804419366921"},"_hasShrinkwrap":false},"0.21.15-alpha.9":{"name":"@react-ssr/core","version":"0.21.15-alpha.9","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"3763a1d0120ceb12dffa4cc57318b22305127a4c","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.9","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-gQbJ3s31voxgbIAOj+/s0P/sRxpe7Wq/WC1wAx02EU6lmDwrTIkXsWCydBBRjQuFe9TrpIV5PMICtsG2V/TiPA==","shasum":"a8d914b6a7bb9e54810e3dbe16d46709aeafaa06","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.9.tgz","fileCount":46,"unpackedSize":544251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRNICRA9TVsSAnZWagAAZIEP/25NrD27XX2W+6eBJN3z\ntfCOiXvL6Oukzy8GSnZPHdNXJD1UWWWienWQIjwYoMF0tQdc1fz4HfE6PrXM\nOzkU5pIkMQD0DhMmJVxUToghUj/upBcnYEMT2+dDNe2Iw5OQr4lly1AkaELy\nToKiIWgrIjLwbl8hPr6jm6jXJMK3hJn2Ip9+EkjAwSUYJiWZ/pIHulyWd51E\niYAmIlaCQuGoRrq3K4sX87uG0btLLHQ9AqYXfw3VqWvPVwnt/LNP60RIvOa+\nqk4hISNL1T42gff6To7nPSKe06dAKoLJ+PztV7BHIoXZZfHBLTZnGkFDIa4K\nyvSWfw2epVUfhyr3jFmCR0negBxzZMIbjZcpRfrGKkNSD4lhnjIEi3IBQQBW\nodqv+GKtcdIy6NqxsfOlvkxQZfFFDM2s616uow0DPLO7k0rD8mnYNg6yWDlT\neix9QVQ+dDvNpVRa8m6/YyVZZoAA4ScZ09UyR8TDVKg8CpobjfI7wIibUBxr\nJ/o05V1pHNBKeOWmoLmAu+LEePkXACowOF2TE0rKr9wgmXMbFmcYLdlQytq1\nv4L7DwXRDHzTxlyPmMl+ESGAfDeFTdPVE0v2LNQvhnKf9sWS/PFU4eccmNH1\nPJQyjL+IQNh+zG2d9xCZAIgvMRZwdX65MtmYSG+Gyil66RTNFB7IyrRWqink\nsjpI\r\n=QTAR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEiJSEfBclCsUuUai8hLADTWYzSi0rErEU594Mkw7IGwIgEnKAeNXqN5m+EbEShtGKJMIkJ+4xEYhXXhWuNJ0T/dE="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.9_1585255239860_0.274769756951593"},"_hasShrinkwrap":false},"0.21.15-alpha.10":{"name":"@react-ssr/core","version":"0.21.15-alpha.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"deff7773d3e513732c5072ef06152cd4d693bbe2","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.10","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-/OTLVYjuTyxNUIiJRqU24aav0IKZ57Xp2taZlHTPlyGwUv6Kli2C++EbyQW7OjhTA6Y/fqnobptVtDFCdzb+rw==","shasum":"f3de13d056cc05bd051bbc42ed2db3af235f4ec1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.10.tgz","fileCount":46,"unpackedSize":543416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefROKCRA9TVsSAnZWagAAlPcP/04GOhtgJd6+LbcXcMWN\nv/n0zysTtTGpNcAaRGJr/J8mQtuagSbXgPQ7K0jGNyuF9l740qgEUxsdzdwd\nBNjzvJjUpf+699t/GfR/xmJm49CatyQrBHOfFOxDF3ZR3aGzvOUPmjoayAJN\nK0M30Wf4twARwEnGXL6l7ZyasjvvTNIaP1Mv2o0T4h42Cbsl6LUBdSknW3Ge\nR1u7MgsTIdNkb3fXZIw+UineqmqHSoatc2ftl1pZzy9LZDn7JIP6vB9PJ2+Z\na07Hblf3P3o4d111pl3+/fdKx4PglHxditj1lHLgXamGyDiAHyGxDdWIvQpf\nXt0HxqMRLmq2WNp3RcYY+hrX9jNXeViM2XuqW6e/32PfirScNHhnHuaIj00K\nWXyDk/qGuHHW0gAVmLoRWEv4TcSDPI0hiLPT75EVOZYURmbDTcvOsRuCR/s2\ndBaHvWURK+x0tGNi/8AIP7EdYtm9r5W7UHMhFoIBhPPN4VlaEgQbw8UGLwb2\n4YzJUkTY+mMS12OLwfqrVcNeyBjtuFWeGwLS827sMZ0dE+fyHY2kw8gpPrGV\nAdrd3GkdRGAQ4PYrGdX8WXfPWTylPcA4BvSsr5lQ92KvpDyB0g5QKuRwIFqj\nEo/+ZH7XpbZYnIReOd5iif+pqA36SVuTXYk1T68q/VzfC3vEp2PTuoGoQc+t\nrLUx\r\n=b7EG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt/wE5e/VIQb3Mdpi9R1NuV369bNJHTC/DWDTLFrjqOgIhAOl5EyiHnVEiHoURPOLb58JoOnhRkwQ8Xo4+RkX2lsUJ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.10_1585255306128_0.0020998513285432896"},"_hasShrinkwrap":false},"0.21.15-alpha.11":{"name":"@react-ssr/core","version":"0.21.15-alpha.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8e03a50213d05b8f43e40c09d8e3a6a00111f3ce","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.11","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-EhpP/wa+EkQ4dW1Vns9Kz8QlKe5UhHjqMqsKWtbmclJRW00+RW+EpiXMhT3pwLYJ9ve3myBpMrjbPTWAfNZg+Q==","shasum":"c781402e17684b721b6542d12f1b1e4952b7478b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.11.tgz","fileCount":46,"unpackedSize":543121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRkICRA9TVsSAnZWagAA8R0P/jqWfnagtHZlGn6R69iB\nZ+GX44EWFlzLnGWcfkpBxMj8TRi/XCupHmuiHk7Dk/kh1PiV1KW3VUPmNdKY\nDZ80PGs6+Ctf59Q4PyJgKE9Rrw2+odXI+vdAYERmE9P6xCcQjWyjviu0A5Jt\nizPrZNMQie+W9l0xO0xR/u5+7yCh8hQZQfTGoq6qx39ER9LH6vBuJaqRW3z1\nN7NKjzaZMMHc13TsoAeFGXWAdcFa4KThBT8huHNTRPWBRfcCldjiuRBqJzZY\n/ak31RUhiLT1KrXJOFuRvQEJnCglhw5XBWVlTYfhJwyAbwLEdTHVH/euTyfm\n9JOnfTogMXYVRhmVNUSC/imgcTtCLNa0xb1JGQvm/6kmkHpQ6uWQLq976IWY\nMEJJBNOoBDDWR4zrcqIsE6lQAn8yUaFAZGECEIUJdceFZ6JeXevkSg78KMM4\ncnNDkFYK9owrnfkh7FWASHUxeY3BKeflqrGBe1IP6T0UU/AvouRwuIC30Hzb\nCZBCwPuqNz/hywDPJLhVaLNsMCjQCXIk11hzMK+BBp1BGcsNicKOhALKx6ep\nlDRYTnBBQYhB9ZM2oAJvuZ6JNGdQKvdVVzx/04JVa+IWcd+mI4p5MAJmpAFL\nh1jNheQTgWzL5FY2HlClfYKtM2ucIg16BOBG9EYMwUamZKWH6mEdMKSdUNb7\nPikT\r\n=zj48\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBbvBIOS2C/3ylCIl3Z+rdkijc+9XqZqKCkKPDLHxJDUAiEAvQLSMJbcuZb/C/lOf0ME+rKHwmGZ/UuIcrA1WgwPfhM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.11_1585256711686_0.09285301125318157"},"_hasShrinkwrap":false},"0.21.15-alpha.12":{"name":"@react-ssr/core","version":"0.21.15-alpha.12","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6f8b36bcd598f3235a2af421ea09a7252e668d12","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\n- Because it is just a view template engine:\n  - It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n  - It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n  - We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n| [@react-ssr/static](https://github.com/saltyshiomix/react-ssr/blob/master/packages/static/README.md) | ![@react-ssr/static](https://img.shields.io/npm/v/@react-ssr/static.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/static.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.15-alpha.12","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-exF8LB/JSO98/VHPK3tEUoLSTxDKwVwqk/kYGYDC4ZpfLuNz4iRG14Xld3409gKajd1Zt33DY+F2dc28FvuNGQ==","shasum":"8f308862b441e4c0cb0d327768c0d9e9768ca24e","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15-alpha.12.tgz","fileCount":46,"unpackedSize":543387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRsbCRA9TVsSAnZWagAApWsQAJqa6IeCXT0a9ty9W4jY\nRM9aGiOrhGULjZqocgs7ftp0PnGSVbXVONS/ag66vxPXGMbzREbUOVWIAPdx\nJeHQXY4shBixx+9m5b3lqs2otO74YX7nulPr6diOJolejcQ6vldSK/vqGBb+\niMKXBptwNdffyCwFy8uewXGZ0jOHKHysvwEwTIIbUiyJyzadTNS2yZvjeqtH\nLXZYl9HvHFGxje6yRiUp+lAjmVfPZ4QmHjd5nn1MHELJhS/J6PHj+qp/CUjb\nlLAfMGI1DWllQv1+kV5R36qFZdnUR/LfhauG4dPjvHY6w2xzmZ+c7VbWqzDH\n/pBwL9Y+20lYzmUlTsOb4aqAAt8hFFWys6NfH3WhGq4CP21ktgHshv+Se+sQ\nnIxIcwyxsapfhpQsZLWCcYL0yvr3Jm+c6D5HQXMzfRQ3p8NNNaw2CTMOFEZh\nfeRoVAeyDxJUn1VRXUtjELUJ0NM1jy0FygW6IfdumPKOGU1OhQzHmwxfOkLf\nKcVZTCt7NgGFFD2LIOzpFH27e2RM+cI8Nzkohk2JBsLwpxaywIwkatWIwksQ\nddTc+M/ZhrIRRL6YF8283HSM3QtUDeuZC1aBIDOkkRnfn8snF1BmefKvKCB/\nYJ/IBiacI/gqlhMqU1SLKntBjmbpn8MLOEwC6PBdEtt2R7/0TNAORvOeGwx8\nyRb1\r\n=Voeo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEC+Ed6yk8r8sDC/xFZHDF3uuoPDX2gmOd7gxRmtQU3YAiEAqBU/vCEA5rQP54OEjFnWtk/x2hdfZvzRJGYq+YkIU6w="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15-alpha.12_1585257243237_0.714005840564089"},"_hasShrinkwrap":false},"0.21.15":{"name":"@react-ssr/core","version":"0.21.15","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"6ddb0f387f3e1bf25c2874e21789935ccd5cbeef","_id":"@react-ssr/core@0.21.15","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-bGFCuFD5O1w6OyYJ+gSii2gQrg+hAYZsGcExX9BzdWuUlH6ZiH1qZia6P/Zept83OBjOAzSKwIBbAWYBxygD0w==","shasum":"11ca7444aa15857b087376f7c30583609c043ed8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.15.tgz","fileCount":46,"unpackedSize":543370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefRwVCRA9TVsSAnZWagAAeDYP/julhQub6ZaUsj4DSyd1\nWJGLsfCc5zAcjTeeBgOthOiPa4TCVX0LaJrAm9kF5M40j2frWToriAfQ4RJK\n14s2G6dbOUmTjRKrJZJjO7bYFpNsqrNivuBS8pO6MSytMlUPbix1ODdOrelE\nhSM345h2A8y1rOHzradcAPlHlmy5iW25FzyIEh19tGl2ZjxvdjnJkv3ZQQVz\nV82irUoC6DtfbD0Vi/wmt4lUxOseZ0A2G4I+EnyouclzW9Ts95zt+Ci3X3hu\nduhiJ4Hzv1L7SlDRrEfMwr86f9d5bOrPuNTqgSEul7810xhQ3+yeKwbw4F+P\n5S/Rbm0frYybq0UuNgcByFjdot+nZwfTem+mpDshCQcgoLM4/evti7DxpWPx\neQxwD49ZyxWnxgqECtXXZDX597wEu/8ezH+Fbc2wRoxyprSfnsb9LLjl1y1k\nkZWvLQW+eIq2IeUu+aMxoLwYqIehwgVPWcVtnRW2ruMsz9si5X97HuJE6Vcz\n9zO7l9lbVG3cGDaojzD6bVBaAF+wyp5+PhQ23BTTZOxIuF3KCxQJ8YS/OVe/\nc+Q3tKSKc901NfXyuhuMoVofZQ9H9RI9lwaGBflYCxtAPau/VvN3NmIWM8Tf\n5bxS6P5RGOiQDAtorX96emSSvd+T0/GrX61QSY66LLrPUqdzQ2Bl/mqF7Q0b\nAbOz\r\n=D6/b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSK+sJWf6px5m0YerozA2hSK2bAecpaDLl1IBzAMldzQIhAP3uYu2i57p7Q4uVyQva6UITog6yeVrstxPdj8Cxbkv6"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.15_1585257493344_0.8382836728175564"},"_hasShrinkwrap":false},"0.21.16":{"name":"@react-ssr/core","version":"0.21.16","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b974f353c6169bb387938354c2c1b673cf89dc28","_id":"@react-ssr/core@0.21.16","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-iaXpoLwkAqRVd5v4uij38MgM7JRDGA/e1VUeR2twh3ZdSBDZvaqeJfXOc+ZPHXbdcJ73T2CSCjvaI8pgOqcLFQ==","shasum":"401be3e351d1d7decde68e0e05bc0eb9f9cf70d2","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.16.tgz","fileCount":46,"unpackedSize":543343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefXxvCRA9TVsSAnZWagAAA0AP/A9O+hNO8MaYeMibYwSU\nOIsVwLmyzdW/lXHFD3bQEMbz1/BuPumdZqtMks43bxBfZSJ8G0ygjNXQzkrb\ngmpzvIBuZMVEpUpwMdsKnwbhqMDkFzhad6zxHDr7edcAzx2Ri6rhOQC4ut7n\nufpGykrcMBJ1SIotgcvDEkSVdFHERGbi2CUZHGW9UIklJT2mUVrUVnja54A9\nKEo1TLwfS6+347WI+j6vzKmuyaZJ8asStaoWmMbB1XW0rj3OGAP+Se/eu+T2\na4G3nTBz+ExE3uCx4+A71kNgJDDyE45QSZBkU/EgMNhDcKpJnEcMO53jvhcq\nM8FiYDY4VhzWhnqAHnLbFfZtHQqY3tMjhV5HbkMhPUMOI2P3p1BBBe187u74\nwqBOomrt6KqBNfEGyZfzQAVD8nLUw/1M1mncLHOQ6Bv94pVTjIA99yQZKqZB\nb21oIcjRXd154DHkMZEzDg+9rCPhLkD6GA3mUqICYXn5RNo5YGqHijFHPJJc\nqa63exYTby356FljFh6wVuDQGxZsCLVf5eluNYMs1ukMOXE7Mq1erxgM/0Ox\nr/BMP/1XG2N9JOUNy7fnqsCXISNn0+cAU9sTq9302geSMMcKmVw4qp862//x\n20C8zIEQigE3THIAo7xnqd4Ep3Dt89X7thmeC3n9ZBK/EhQzYIGO7PthcVIe\nkD/a\r\n=6sA/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXGsOXhyGwuI9FicLexUSizxsH3liga1BT+AwjxlkxqQIhANlR9BTld2m7Br9aZYuvrE4dDWRnMYxPlzQ6eznAHA2i"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.16_1585282158855_0.727644568810601"},"_hasShrinkwrap":false},"0.21.17-alpha.2":{"name":"@react-ssr/core","version":"0.21.17-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"2474884164d5434bd1bf5f85418282fad9b647c0","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n    - [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n    - [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.17-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-qbXrfOdl2i0FF7L1n/5cbsub+sPSd60Myuw5uIH8/yVj10fImFT24mGNuRH/9/x1ddU4l+8beRg+EurEVMSa/Q==","shasum":"078e3dee78f524ad2dfb6c5f463c142a754bad70","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.17-alpha.2.tgz","fileCount":46,"unpackedSize":543509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefflSCRA9TVsSAnZWagAAPy4QAIQWaCbWJVDC44Iy1FJ9\nd5+26bWYR28H9szmNjB/ti79MrhSgSpEXXNiQVWvGf7DXtb8//jCsCh1NrCS\n6y6M8tsLgzge3A7rL+I6X5EzZH6yTTSUNAScOA4s8CisTJx4mcrNhUzSkFfY\n6Z6PSArfHQGJqO2W+V6JiKmSFC3apiyX8rPD1nst/QC2pNqJ3HW/w0/7rSrt\newFNiys5pW6d71E1S7W+gyfHqfam//RpiV1sYqiAWYE422N3d2W/1hEMFrQ0\nRyGnGlNosJAEmoMAxkRAQxq69uymFq0FxvxGmnn1jecveysWadkTB1s/AL05\niWd2Y2yCof+18AxMKeAZ58GuFu/adcQr+ytzbH+JJis2pemQc5XLVFRkcG+t\nkl/E3kUUmg07+t5N9uPqSX3cgOjAX5YykxzTJgAmxksJ753k5IwgvKUkTJvy\nKsrIUCuAmRsHLdngSFOhf4KRdP37pBs9GSSv7Lznwv9XoSCbqXKVhWxbC9I/\nKDJcZUrHTzCLKlMXcuJmcvFZeFqA/KZ0WC4vGzBUSjOG9CcsAxf4J12wgTzU\nu29rL6m8sovj7Paam6HzsZuO+opGgRCAL/zkjlK8cEuruN4WcekVmOy+iO96\neFCNjBm+d+LOKfmvQp4pXL0OXSS/WdDyX9EjZss5FEBdckanohA/ZLKtodzu\n7B5R\r\n=wQ05\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGDPT1s+KiKvVi78YhDyEdWIskvbAXYq+ZI3n2+1ntjAiEAmAVmaz59UUK0xsh3MpB9A8HdZX4KRJcS8NS1oQPKE38="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.17-alpha.2_1585314129482_0.3534690357527952"},"_hasShrinkwrap":false},"0.21.17":{"name":"@react-ssr/core","version":"0.21.17","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"aef50e23ab7b49d9419cc5e12780192d6df14e81","_id":"@react-ssr/core@0.21.17","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-sTtMzvuuDPiHKs+Fj3Fk0qsq8vtIkzjICQTUKOdEYWzMThW58UIncLPh4OFmckcEUD9AZyuj3nnnOYfB0PIcTA==","shasum":"33883d2df971075aceb918c094e013f24db4d685","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.17.tgz","fileCount":46,"unpackedSize":543493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeffoUCRA9TVsSAnZWagAAAnsP/0SxwQ5z3kj5OBA3NKX5\nHINMy/GXscj2mkoJ8xPcLwRpABZkxmCYyxPvUj2FzD7HenAUYUXmWn9NOQje\nw3jRXm/DTVqLi7d7jnkCb8HfrrV0mEuJmJC/9qz4mJI2zIFZd7Eb0bZuC6qQ\noJ7F3yEEzl4L/5DONw4/tXyKubqkaiWJlyAoGTnmRcVnvwg4tFpisdv3Cin5\nlfftXygYsk40PFSGMgH9UznEaqgC5Tw9+3YdjY79CyxtQW8eYERcn+Ce/Ngj\n63eQWGTGcYLvIZq/LpBd7q200637KNqH9Q/rqkn1AuwIapPYyh9vUvAaguTg\nj6jawJTB6i9L57R+837cspmhVcyCIQV4hZ+FtmiSv7Be/C7yC68eB5tETRzX\n9toT2sYojlbNBj4UGy+zlC45IvvymZb/yvT7fxjfC2IKXTrFzv+byuslHktU\nRR9+o86jNQPGiZ3yAUlyfmLzIVtrPH/1rf6qFGne7jiw/kZg4dOdU+qL4UiM\nI6qvZBNUWD3KOjInQ0Rbec2KDT1QwAJy7Ljt4WWt4stBOK0sVIh0xJIlDZtV\nWsplIqAvcSsBez7aeZv93wOmKGjTOP59oLAQmbjiolR35jDCsVzA84xwCD1U\n3q4oEo3nfoMWY04e3JDPeI0mi3DmmJ8rJH5SqvHqL8zist38iCm0fb/lymCd\nsn1S\r\n=msHu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRvbnozvOTiG1QmOkXCPvx+CQ7oQxiaPGjdVK8eh7B/gIhAIPuAKT4p0i8/OEa6q9KOv6XPZ2Fc+F2xUx57Oqk/1pj"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.17_1585314324049_0.1204454653915541"},"_hasShrinkwrap":false},"0.21.18":{"name":"@react-ssr/core","version":"0.21.18","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0dd2d24de76527ceba13edbfe1b56719d32408ea","_id":"@react-ssr/core@0.21.18","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-In3yOTsExdi3j40vbMJ/pQYckj68c/DSslcjW9ORhTttI8MzccDluSRuWl/CbjsHtdMVpdfCvi7RACVKc7rDvQ==","shasum":"c6480544e28f036099cdd4777d13ca7e634bedf7","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.18.tgz","fileCount":46,"unpackedSize":543149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJef75TCRA9TVsSAnZWagAA48IP/iSfTCdmgUiggGWpLmb9\n27+dyVgfBuCqln3i5R+Vj+CTVdB7o5eVAtJxjJECZjFa/F/2MPWSzYmjCMbf\nIS+/tMPzgvK3rlJEGisDjZE6v6P/zvNregSg9T7pDikW0MK81lEqMEguJEwT\nWtOFLcb7NGvZA0A8tVwdJ12zhOogdQW07jmJKicoHdzaWD8/wbX5Sp2yUujN\nrd9BLGhKTb8qG9KWKKHg6YxdVDYzAsC7cmbTZnaQBT5yHutKXh6OoC5Tbqtn\nW4HLS6g4WJhf9TmJ8EGRPQEZNLj5/5Dm5ypdWON7J1GzCv5S8ExElANi2dYw\napSspPbNmQcFHfrL3ouOW2k/x/Lla01snFMsTPNjxvkgF9eyK6dFveeiYyYk\nsPRQfxl+rHdGHGN91KG2hcMzjzMlwYDx7DkfrDdco2t07FFi+a4xEQRjmylE\nG+YjUQScBQ1kNnaQF2bEPrwQZF44G9odM5TDcVmLzKKQOTysKTi11D49CPYo\nb9qAUvDtqgIrKeamsijNdEXaJGO3QDO3jM2E86GcIRwioxYY03OHbbdYhlbd\nY4DpcMq0jkz6MxwqkE3qdm3MkkhZ0wFf54tqLEftAVzJ4UeUJdklA/MpLnhm\nPF6aOxKwWCgs7tW/xwmGfjpkfrfrNrtejHUpyE3EGWy5FyIjjgoCB8iU2kfu\n029t\r\n=1JYr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHVGX2giPw/71JVVY02SOEBME/+9BD27tzlFoLsVyiaAiEAgn+5KW5bJbPacVVdlVmMPHts9QSfzWaCdwbxMGNvRAg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.18_1585430099004_0.805371868530891"},"_hasShrinkwrap":false},"0.21.19-alpha.0":{"name":"@react-ssr/core","version":"0.21.19-alpha.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b3516e741990fb2a43bd44564b483cf84a8c4edc","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.0","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-V+x0CSNBWYGYx3Hg1jDoDzwvsvaG9bI9o7H3G3jeKgY6lG71W/uE1USXeBv8DdIuz/YgOIx69bXBfbqTi8onkQ==","shasum":"4ff39bbf73fb804b95812866efbb7977676140d0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.0.tgz","fileCount":46,"unpackedSize":544335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBF/CRA9TVsSAnZWagAAw+gP/2bAFsJXHVTB2sV/NfIz\nGRCKQBcH+o2Hvu6Y6Y5PHtTNaOJvZ7rKfrupUoTxXP1uKPFetWQtyhoU8RfZ\nKcySK8WoIaKkWzyBizRR9+/HIYQgK4SfWXQXjkLWQfbrjkhpMHSaqff5yDHE\nUUAflC8yd2AYVUkWCtz8JeGvhPROIrfSGJqzE3JVg0Dcb1uXb+gv9ue5gxVY\nMJ7J8n99xQt5bgxOeT4zB4LpETGyZ9xH28reG/kU91IZCt7KHdD6mpnReBAs\nE/hBNv/7OCd+71vPRK+EDtZEXfVyBRjz76F3nIdYl2DmRJJ2ue8g4ylBMBpK\nfOLKg4bQIdh6mgCzQDI1eZ/7OxmmEKOY/ZSrlG0tcljFHhcyg00s3LmHMMNb\ng0DT+ehyUH9O1hOA7I6PTZGek4FdYRgAYelpAaV7Ybtg15npcSLInFMXgQCb\nB81Pwr917cbMCtGvKBaTEBu58SEulcVyQM+QfaKQHhyGsFMTSKQ9zbXN99VG\nyYIIT10co6qaMupoxPfHoouCFWIXQAWwziVZIZqQbzqKQX+DsXT3Sh312tux\n4oZrBOMZBORds+qb6wFR8MWCVFS1BcnnjDdGIh+bqlUmjflqJzMogZy/snIb\nE81hOwV6gkUSglJz4BNTJZwwm2gF5VaqvP9LJeTnICXgUIWNwqGGc5bXJGRy\nDJ6E\r\n=7p8z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5i+0YwJK03UUUbV3tBSGBPTGpznWyA0bngvra29MHaAIgc+uBa/27G9ALgBHHw4+Gy+7fcpfo3x+G5uhDW4flQOA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.0_1585451391137_0.8877535749004606"},"_hasShrinkwrap":false},"0.21.19-alpha.1":{"name":"@react-ssr/core","version":"0.21.19-alpha.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"fa9d846125efb915b9b3b281d8bf6159479d95b4","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-b0DEyTfUJiaU5wqpFU+TDhdZt6ptZ8BiB7NHCM3Ytu4PEQi7s5hAsuKGQWDuSFu5TzTQaEZ4miNvNEZ3YLAsAA==","shasum":"ca56937ed07b6c12d1c23f5effbfcf8bca0fd8b8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.1.tgz","fileCount":46,"unpackedSize":544091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBS5CRA9TVsSAnZWagAAHnMP/RxQ65W6Gx8ZXZCFe90b\nVUxtLwr4Tedj+s8faY7GvX27Vz/PQShk1NU822KX5eTWdhRPW6LhB4wNWTC7\nEeRNIc2QXCkHlW4Lv8zmV73ZufM1nQUDNegZtJ7VwpI9ALprTNH4m/J6i0Oi\nX1+qqgdfKvBG/428hPTvsrjkQe9qRECrmIE3jHCC5prlXYqvaiknTwv4SxrZ\nC+RpoXZWjDyB8CaCGlSdlBaWH8pjOCPTmNmXF3/zppZHvuAvYBT3j5kz4fMN\nA9EAT+fEbFAnVaU8LkT7m5deUC3iFeGPLd19Po0m+SmOsk7Y5mm1W9KAd1fN\nsnsqMz4uqyA2U2Ha+UhqkD/nepDvT+Zi373bSFfE+V7z9YOkJVCg8K630FaX\nxkT3VPTtu2BnyMdfBDT6hQpLhOTou0y46uWLVrMwihYe6N9pwgPqubc5qU/C\nESIh2ige07Ctm3HdUtG6wt4F8T58XaqLPwoIZbMyAFaT0WeEgrEbfiTW6bTa\nFqAKzN0AJYzi3uU9V+kLGNaXl9q50pQHWHuWMwdgtPfAH1X5QZ+0eX7n5eVZ\nSOBMg4yGMhcUjdx1gTfWvRjFdVnoCPQ6/43axfCz0Ua/kOsY6TQ70Z1uMuoT\ncejsMm6IQS4XcGXl6GspF9b6rlTMG9g7S3TtcVUFBPD2AHsZzltrtPy8hcde\njQka\r\n=XLVm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDutPdVAupRoryJg1B3CU22FTwkqYM3qjKWOvtSh6d8PwIhAP1BuInb2eVxoLhrT7/1FvlMUjczt3qExKWYScRyIlwh"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.1_1585452216992_0.15802266896447237"},"_hasShrinkwrap":false},"0.21.19-alpha.2":{"name":"@react-ssr/core","version":"0.21.19-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0b79a6053441015f36222442f3c4b7670b523f81","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.2","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-tQ0WwHa9oATphRm2Yel5vhcvyaKIcuAXkN7x2w+lrVV5Vd+2pDJh5TrciEXpIYlJDc8RycPhFHD6vxkoVQpLfg==","shasum":"c324d07d3ea35413cb804e02d458877b7fa110a1","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.2.tgz","fileCount":46,"unpackedSize":543914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBjCCRA9TVsSAnZWagAAEUIP/3c5b/4zIcPbgpOkh9sl\nTEIRdkQlo7Q6XgKwrRVSaG7W9ylbdI3M/BChVAMDDWWE9mW2ScGxjSfuDE8Z\n5gKmlwJrEmTr5nbzH3eZtYLE6eTFnZhYcnXfbSqlvNxWt84q00eofUQskG/M\n/ZuoY/IWVmqDLN353nWpiifJYeoM3OPXCkKbWWvByMjUqImi1BXvlIdFTpR0\nzZBo2bTNpMoyWsfKj42jiYzsivcnx37vjLVTWHDCu+xoX3N8O0BgdLBfkx9l\n7mdoWmZh61lZL0Hl7atOoXtTjeU7OuD0mxMSbvT9Q1L2lVWz7+N3aQZqLzmD\ny8SWQNH5MaBS4lCDkreojwufm4c9KDyBb3Xj2Jm0jUnaoBSZRnm3wMax/833\n5uLAHZU0kps8XKTKGe4EFnzKzDX75nvIjcPBMmqmXoKW8PdO0mwweDKJt9gj\n5d+FdQDWU5kL9bmkb1wNYiWVBKejb/HjxkPru8xNbIlJhlftO42DZGnJqTJU\n7yTgsf88XwEJfxnFZFcr7agUYgyJ5Pvag7XMcMrC+KiS3hYdryNqe8xzGgjY\n8/lfDeyWERp6G0qoVbV4Mo/PzgOCBHKTN19xIWf+sNf3/eKWb9SRccde+7kh\nXZyjwsO0fSzNiDc/bkTEcP160LYx/cux3lOJNKL2n77aPThsL2iBK9yabB+7\ns/BS\r\n=pmxR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID248goIbfy4WAalWMgd+1PZJTOdNMTVdyYvgUMGQS27AiEAsgK0hUfmVAmg3b2WocqEt6awAlh7ddo+PrC641ZTMoA="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.2_1585453249530_0.5163217314489197"},"_hasShrinkwrap":false},"0.21.19-alpha.3":{"name":"@react-ssr/core","version":"0.21.19-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"10a8974f966b6d8170e2a49f31083923c95184fb","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.3","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-qgkXalDmUkBIEiT4b49LWHednvoWdbRwhmLWSeSBWx/zQFOeZA5wJIOjUBPcp3kf14N8BX1bgEXPH0yfyup6gg==","shasum":"1e996d4da7cb62a01d0f356cfd87eacbd2e10a9b","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.3.tgz","fileCount":46,"unpackedSize":543336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBlYCRA9TVsSAnZWagAAF1oQAKLc1Qo9VK8MHHQD6Pgu\nEpTH70xIMTrjifUtKb0c0XnLDS7+mJLumONQhy7HJMtkersJR04zXDCzmDkw\nPsXhM29rIu+tgtegisHYl9U7++rGget3bzEXpm+uIMgBSkNP3fr5lWSZ6wBa\nR47aeVuiQszIdYzj4ywC6EEemQNVb1iwF5TiOIIYEds1JKawc5hrnmMJZCSC\nwiWMI+2rE/GF4hy/f6/m+nOlJYsTXlVUzuwbWTK7Io79zLWrpXTcMmR4Yy45\n2AuZQDnWfPiEyO8qXhhrDkc7Ix+5Qs5kNckjpCEALXJZJEVlCEJcL1TnMC8G\ngpC3vsmtfKAqlt8whXN6nlFdnfsUp9aU6xtGsbuWrBzgQApkZstrDFxVG5VW\nFFedSdzBZTnDFrtmeF6lDjBKo+nekTb3YPnseHEuyXzBfEnPMmdxuTfiuvum\nBTsg4jnEwnNIe0sYrQrN2Y74aagetVdXAK0qtYr10KJw4hOc4IvdmsiO9HgY\nNYX5BG+ogl0t9g+IVd+wXZ7l/lXyuV4/fXI2VVPqsFSsVbyfm8b2nUJMtHKq\nVfk3cUgG02weRBGiI5xGZ8ttp+DOV1lJ6ilBV3BGy3+3ZYfht9OpI3lPp9NL\nuZtxn+vnK0lKo4Vg9QpdDSbdan867OKmF6IZZKKYDUPGkPDYl/qPryf5d8xq\nij95\r\n=U39O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHFYzKsugQRAAnGYzQKaRNT4+W+SJvXAU96BXuLXsGcjAiEAnNuY12q2zQClxJH1+Tf4UuDgoW/U3Zq3gxYGci6vXFQ="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.3_1585453399963_0.24666880398432767"},"_hasShrinkwrap":false},"0.21.19-alpha.4":{"name":"@react-ssr/core","version":"0.21.19-alpha.4","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"c849a7dfb5900b7c333b4a976940853ba90afe31","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.4","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-drh/1nGpbdLFejT14XsRn+rpHXgsS/4Ee3/ZU6GD1PD7AJNwK3DD0xOa8VNSnNI2pm2ztKxyxtuzq0d9AsEmgg==","shasum":"76fea268042076dddd5da5df712427d054d7ad9f","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.4.tgz","fileCount":46,"unpackedSize":543108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBoPCRA9TVsSAnZWagAAwsYP/jmOdrR36HY2VWexbzse\nV411Y7rqvxmAoXx3E8u+d58svOe7j2/XojMxBx2Agyj1qIPFFmVoFoG6LSzz\nonMw3hjhK9g2oUZnS01HCiba5AVIrBhhPTDpHs4j/3A58QNQSl2OjDgxgREK\nfi3HYuQtu/P+mfUxhy8UEgODOTsCA+qrnROZzHaaOnhUdpEL3OKRwPVC/ysi\n9licvPJsmZe4+qJr/KOxk6onl+OrwcCgLnmlnWYxxJJpSSL4jOuUeRkNDf7e\nZsqkgJiqYTEevzyeall8ztdQ/eLIl5dRkWiw4iGRidaKxReTXmaCrTws3cbd\n2lezdlUotwWfJry2nhPcZ7lfKjd3/+oIAovTcOadE50IU6Ggj5Vb0ER+39I+\nTohaE6ZoPonGgZ+4M/bflsTtmTX1zyoIMO66FsjP9phOwt97gwe4xOl/E95S\nqwWti0hCdlVmlaq98BrnPM3aPxHjNOqIp6XnNnmMoH8Zg+RBqfIj7yyLtdBb\n9BjxZyd6GI5+O4xkG/mwf/dS/tRijuj2IkaLa83eJua7W6pYY5dWAJf8EcIY\n0e+ImHRTY8reuEl/riyoiop1/K7niUMb9dtjvRi1e7tbEBqmtUPE1BcE+7a8\n5RyAOY0A/tD3tXUVU2p7rSN4tqtaIqaAcvz/N9IITKWf3HOvnu6FzMAzCJHs\nFSu2\r\n=HrS3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBSS+U3whynUVXcXo6vGmhUZH5HIgT6bTrYJwfiRaSzTAiAY961+z3UU4kE+SF0Y1ejLziVsyUqK3tGhKfeqYodVXw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.4_1585453583313_0.5339021615182997"},"_hasShrinkwrap":false},"0.21.19-alpha.5":{"name":"@react-ssr/core","version":"0.21.19-alpha.5","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"949ff0c85ac41b7399f279b8e84ad2f03eb6157e","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.5","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-eex5rsbYunBdoCfnPOU5Y6FrloVDablwX+f1r/0PyJEfh5g7iIOZm8zSnxTfqRmwJQPt99lvI+CKrO1gr/pFjQ==","shasum":"9e04da77dc1b19841afb699d3079462db0cb321d","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.5.tgz","fileCount":46,"unpackedSize":542092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBsdCRA9TVsSAnZWagAAMKAQAJZg7xdn3lDN9vfziROW\nKBr+4HWHm58dJ2aUDasvNlD/wVzm6yCR50mA+vI1Vatlx+l+sJ1mlKwNoLal\ngNy4xUyuV5oukFVMR7uVhahQEXALUL+QjP9n4WrwsYCepESs3wsey006X0qf\nZEa/u2Kf1SeYtgd3FBsQ47kAkysXY0cwRZaPkdQgO86KeZnJ41aQ7K3eZW0x\n57V0AGKK2wmsJrxf/1wuHPcI0UrvxD920XuKf/I7pvgHNF+F9cvCN8pDQh+b\nkqkwLq5i1xVhWdVccI7R1DeSODSD+pH9rNBECUJyd/GzQG0bwrMJdzQGiNzl\naUkr8rGh/y1sgHmmAG2j/NyDFGg9qz5Umn2KWzd+I4RE/zUnzhvDaAPdBceW\nOsLNHUirteC1QigCMU2w/FXsQjFTfuIo1flux6Kwo1BUdNFJX8wychwtr1ed\nPkxapIxCVGUBqA/UMXzYdB9Qre2X3uLmYEbcyNlBf+PF0WPdX4Y8yRH/7VaI\nB60+kXnzq0Vx4LhcWrOM99/9dM/Ym8L5V2K+evAj3aEtXj3hVGOO/Zv4deey\n37OEfwcWkHcbwect8to7y8xMgndBY0YEWo4mzqQPwv5FkjyJIW+TNc+doBfW\nBaG+djWVI8ewXskbipb2KdrmHglXshtm70h7W+aZWGI+zinFpXTCfwKr6/Fx\nTIfG\r\n=4eEg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZmRdV+861CoTUqUX5RYr6slAIbcGmo5038p+7ZiZdcAiAdDAuRns5WTqWn/o3Q+iA4T1ZvfXTDwmESy0bfisNLtg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.5_1585453853502_0.6636716516167742"},"_hasShrinkwrap":false},"0.21.19-alpha.6":{"name":"@react-ssr/core","version":"0.21.19-alpha.6","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b40ceb568feb62a7c59a7a0732eff567086915a4","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.6","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-GvaC8QsPsjL1abs9G6DG50K1NOCGPz/JGnSa2zYc3/6Wt8popYSzZeC/OUPIIPGdtG03Yib8D6jc1O2K0SbmFA==","shasum":"270165474b356df5f2bdd7c183ecdde2c5873b7a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.6.tgz","fileCount":46,"unpackedSize":544384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegBxOCRA9TVsSAnZWagAAbAgP/2j2LNnjN3tcADZdbTBe\nWs4VuKpd9C8Jt7o314aE8CAFOcR3K5nqPW8dUbPggwomNsPoV5IxtAoH6l13\nYiWf+iUYH6Pq4yjSuU+Zcvgk0KvFszD5+2d2vka3UgQjbocQGLPrTaHAQjd4\njxdWbP23vWTiyQhNaRpnyl2EM6mRg6OZQKuBKUNX9EjK3N42UpkggkW3p6/f\nDJ2ujgrY+A0JCr7UK+3o0QnPnjIoXkdKNjEKmxMriNCY9eU6KMxxjS+KEH7t\nI83Dl98fqvXGADny6/RtEpFJMKz1dmiq4FP2RZ2ESvlb0DTK6XLQ+57eo9Vs\nwDNIsB6aoyUxZZFFToomfBH5bLylFhmI8BOtuUykENwW/f4l5tjw2ZVS88Zd\ny2l5oJVtkNOwtpTFh7tGIeUAB3QOq3sOA+WR7lC3CiVuIzvfuDL1m9Dzml+6\nQetgHbTj9xzsomXAGEENIbliG8JkIWGTvgUfd1X7Z52hwG6wg5mVvv4ov1E2\nX1PvCxplHbYjGfROs8XrEIbhtwsISbX4sCugY+I/9rh2H4nRdxr6bIVaufba\nteTaPrTjOQQtPMdmXHlr3wjjm45LGkALL9L48g8yZd59Z4H1EK5NVPGGhrUt\nraPv8PvpKrrz5jU+w8LnevrUnaw0UQeFDGlPYUpalw3HiZOU7bZbqsSAYcua\nKA09\r\n=6OIC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB3D/f8zCU1AJx340q0hvvNdgTU5u3OtCVnhzX8ohYRAIgQyhvRWLMXQSuVEv9Sqhx9heldS9Si4PhQORmNfNvlVU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.6_1585454157619_0.7960032936946104"},"_hasShrinkwrap":false},"0.21.19-alpha.7":{"name":"@react-ssr/core","version":"0.21.19-alpha.7","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"1b5d62e6b1f3d947c337bfe2048afc3d4d4a02ec","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\r\n\r\n## Overview\r\n\r\n- SSR (Server Side Rendering) as a view template engine\r\n- Dynamic `props`\r\n  - Passing the server data to the React client `props`\r\n  - Suitable for:\r\n    - Admin Panels\r\n    - Blogging\r\n- Developer Experience\r\n  - Zero config of webpack and babel\r\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\r\n  - Built-in Sass (SCSS) support\r\n\r\n## Pros and Cons\r\n\r\n### Pros\r\n\r\nBecause it is just a view template engine:\r\n\r\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\r\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\r\n- We can use [passport](http://www.passportjs.org) authentication as it always is\r\n\r\n### Cons\r\n\r\n- It is not so performant, because it assembles the whole HTML on each request\r\n- It does not support **client side routing**\r\n\r\n## Packages\r\n\r\n| package | version |\r\n| --- | --- |\r\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\r\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\r\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\r\n\r\n## Usage\r\n\r\n### With @react-ssr/express\r\n\r\nInstall it:\r\n\r\n```bash\r\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"node server.js\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`server.js`**:\r\n\r\n```js\r\nconst express = require('express');\r\nconst register = require('@react-ssr/express/register');\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.jsx` or `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req, res) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nexport default function Index({ message }) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\r\n\r\n### With @react-ssr/nestjs-express\r\n\r\nInstall it:\r\n\r\n```bash\r\n# install NestJS dependencies\r\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\r\n\r\n# install @react-ssr/nestjs-express\r\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\r\n```\r\n\r\nAnd add a script to your package.json like this:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\r\n  }\r\n}\r\n```\r\n\r\nThen, populate files below inside your project:\r\n\r\n**`tsconfig.json`**:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"esnext\",\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"jsx\": \"preserve\",\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"strict\": true,\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true\r\n  },\r\n  \"exclude\": [\r\n    \"node_modules\",\r\n    \"ssr.config.js\",\r\n    \"dist\",\r\n    \".ssr\"\r\n  ]\r\n}\r\n```\r\n\r\n**`tsconfig.server.json`**:\r\n\r\n```json\r\n{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"compilerOptions\": {\r\n    \"module\": \"commonjs\",\r\n    \"outDir\": \"dist\"\r\n  },\r\n  \"include\": [\r\n    \"server\"\r\n  ]\r\n}\r\n```\r\n\r\n**`server/main.ts`**:\r\n\r\n```ts\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport register from '@react-ssr/nestjs-express/register';\r\nimport { AppModule } from './app.module';\r\n\r\n(async () => {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.listen(3000, async () => {\r\n    console.log(`> Ready on http://localhost:3000`);\r\n  });\r\n})();\r\n```\r\n\r\n**`server/app.module.ts`**:\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { AppController } from './app.controller';\r\n\r\n@Module({\r\n  controllers: [\r\n    AppController,\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n**`server/app.controller.ts`**:\r\n\r\n```ts\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Render,\r\n} from '@nestjs/common';\r\n\r\n@Controller()\r\nexport class AppController {\r\n  @Get()\r\n  @Render('index') // this will render `views/index.tsx`\r\n  public showHome() {\r\n    const user = { name: 'NestJS' };\r\n    return { user };\r\n  }\r\n}\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  user: any;\r\n}\r\n\r\nconst Index = ({ user }: IndexProps) => {\r\n  return <p>Hello {user.name}!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\r\n\r\n## Configuration (`ssr.config.js`)\r\n\r\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'default',\r\n  distDir: '.ssr',\r\n  viewsDir: 'views',\r\n  staticViews: [],\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n### `ssr.config.js#id`\r\n\r\nThe id of **UI framework**. (default: `default`)\r\n\r\nIt can be ignored only when the project does not use any UI frameworks.\r\n\r\nSupported UI frameworks are:\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\r\n\r\n```js\r\nmodule.exports = {\r\n  id: 'emotion',\r\n};\r\n```\r\n\r\n### `ssr.config.js#distDir`\r\n\r\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\r\n\r\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\r\n\r\n```js\r\nmodule.exports = {\r\n  // dist folder should be ignored by `.gitignore`\r\n  distDir: 'dist/.ssr',\r\n};\r\n```\r\n\r\n### `ssr.config.js#viewsDir`\r\n\r\nThe place where we put views. (default: `views`)\r\n\r\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\r\n\r\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n\r\n### `ssr.config.js#staticViews`\r\n\r\nIf specified, `react-ssr` generates html cache when production:\r\n\r\n```js\r\nmodule.exports = {\r\n  staticViews: [\r\n    'auth/login',\r\n    'auth/register',\r\n    'about',\r\n  ],\r\n};\r\n```\r\n\r\n### `ssr.config.js#webpack()`\r\n\r\n```js\r\nmodule.exports = {\r\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\r\n    // we can override default webpack config here\r\n    return config;\r\n  },\r\n};\r\n```\r\n\r\n## Custom `process.env.NODE_ENV`\r\n\r\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\r\n\r\n**package.json**\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\r\n  }\r\n}\r\n```\r\n\r\n## Custom Babel Config\r\n\r\nWe can extends its default `.babelrc` like this:\r\n\r\n**`.babelrc`**:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n\r\n## Custom App\r\n\r\nJust put `_app.jsx` or `_app.tsx` into the views root:\r\n\r\n**`views/_app.jsx`**:\r\n\r\n```jsx\r\n// we can import global styles or use theming\r\nimport '../styles/global.scss';\r\n\r\nconst App = (props) => {\r\n  // yes, this `props` contains data passed from the server\r\n  // and also we can inject additional data into pages\r\n  const { children, ...rest } = props;\r\n\r\n  // we can wrap this PageComponent for persisting layout between page changes\r\n  const PageComponent = children;\r\n\r\n  return <PageComponent {...rest} />;\r\n};\r\n\r\nexport default App;\r\n```\r\n\r\nA working example is here:\r\n\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n## Custom Document\r\n\r\nJust put `_document.jsx` or `_document.tsx` into the views root:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html lang=\"en\">\r\n        <Head>\r\n          <title>Default Title</title>\r\n          <meta charSet=\"utf-8\" />\r\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\r\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n\r\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\r\n\r\nAnd then, use it as always:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nconst Index = (props) => {\r\n  return <p>Hello World!</p>;\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n\r\n## Dynamic `Head`\r\n\r\nWe can use the `Head` component in any pages:\r\n\r\n**`views/index.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { Head } from '@react-ssr/express';\r\n\r\nconst Index = (props) => {\r\n  return (\r\n    <React.Fragment>\r\n      <Head>\r\n        <title>Dynamic Title</title>\r\n        <meta name=\"description\" content=\"Dynamic Description\" />\r\n      </Head>\r\n      <p>Of course, SSR Ready!</p>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default Index;\r\n```\r\n\r\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n\r\n## Supported UI Framework\r\n\r\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\r\n  - [x] [bulma](https://bulma.io)\r\n  - [x] [semantic-ui](https://react.semantic-ui.com)\r\n  - [x] Or any other **non** CSS-in-JS UI frameworks\r\n- [x] [emotion](https://emotion.sh)\r\n- [x] [styled-components](https://www.styled-components.com)\r\n- [x] [material-ui](https://material-ui.com)\r\n- [x] [antd](https://ant.design)\r\n- [ ] and more...\r\n\r\n### Non CSS-in-JS framework\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\r\n\r\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\r\n\r\nAll we have to do is to load global CSS in `_document` or each page:\r\n\r\n**`views/_document.jsx`**:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport {\r\n  Document,\r\n  Head,\r\n  Main,\r\n} from '@react-ssr/express';\r\n\r\nexport default class extends Document {\r\n  render() {\r\n    return (\r\n      <html>\r\n        <Head>\r\n          <title>A Sample of Semantic UI React</title>\r\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\r\n        </Head>\r\n        <body>\r\n          <Main />\r\n        </body>\r\n      </html>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n### With Ant Design\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    [\r\n      \"import\",\r\n      {\r\n        \"libraryName\": \"antd\",\r\n        \"style\": \"css\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n\r\n### With Emotion\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\r\n\r\nIn order to enable SSR, we must install these packages:\r\n\r\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\r\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\r\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"emotion\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n\r\n### With Material UI\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\r\n\r\nWe can use [material-ui](https://material-ui.com) without extra configuration.\r\n\r\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n\r\n### With styled-components\r\n\r\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\r\n\r\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\r\n\r\nAnd then, populate `.babelrc` in your project root:\r\n\r\n```json\r\n{\r\n  \"presets\": [\r\n    \"@react-ssr/express/babel\"\r\n  ],\r\n  \"plugins\": [\r\n    \"styled-components\"\r\n  ]\r\n}\r\n```\r\n\r\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n## TypeScript Support\r\n\r\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\r\n\r\nThe code of TypeScript will be like this:\r\n\r\n**`package.json`**:\r\n\r\n```json\r\n{\r\n  \"scripts\": {\r\n    \"start\": \"ts-node server.ts\"\r\n  }\r\n}\r\n```\r\n\r\n**`server.ts`**:\r\n\r\n```ts\r\nimport express, { Request, Response } from 'express';\r\nimport register from '@react-ssr/express/register';\r\n\r\nconst app = express();\r\n\r\n(async () => {\r\n  // register `.tsx` as a view template engine\r\n  await register(app);\r\n\r\n  app.get('/', (req: Request, res: Response) => {\r\n    const message = 'Hello World!';\r\n    res.render('index', { message });\r\n  });\r\n\r\n  app.listen(3000, () => {\r\n    console.log('> Ready on http://localhost:3000');\r\n  });\r\n})();\r\n```\r\n\r\n**`views/index.tsx`**:\r\n\r\n```tsx\r\ninterface IndexProps {\r\n  message: string;\r\n}\r\n\r\nexport default function Index({ message }: IndexProps) {\r\n  return <p>{message}</p>;\r\n}\r\n```\r\n\r\n## Examples\r\n\r\n### @react-ssr/express\r\n\r\n**.jsx**\r\n\r\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\r\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\r\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\r\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\r\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\r\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\r\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\r\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\r\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\r\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\r\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\r\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\r\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\r\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\r\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\r\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\r\n\r\n**.tsx**\r\n\r\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\r\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\r\n\r\n### @react-ssr/nestjs-express\r\n\r\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\r\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\r\n\r\n## Real World Examples\r\n\r\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\r\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\r\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\r\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\r\n\r\n## Articles\r\n\r\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\r\n\r\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\r\n\r\n## Contact\r\n\r\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\r\n- via [Twitter](https://twitter.com/saltyshiomix)\r\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.21.19-alpha.7","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-iReydC4VPlWdDhWmMflX5eKn8F6JccrQIFEIQolXXUpW+6c6iWdrwB+aXch/DBc7s6G9OrbcBk9i9vxRiuTeNg==","shasum":"193d2520607236d5cf0f98c01e1edaf05e0200a6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19-alpha.7.tgz","fileCount":46,"unpackedSize":544067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegB3WCRA9TVsSAnZWagAACcoP/jiAd2b2NOIcrazSbyQ3\nl2FvnkrFzjzqU21+ASJCt1LIjJClnxlTwGTo0vpin5rQXH5Wq7j5U7PR0rFn\nTJfi4jUfm8EUivpjESYohNq1dqzOR2DcDcPhsl8qg22ymAQlKrd2By1Uut4X\neOCM91GzYJxOl+5W/5rDcDWV1u0yZFgBfj+NfXtmiBA2sCObA0TOgvNaMMeT\naeKg8v0HaNQoYcigV0laAoNxOt8aCtvOw1AgBQe0oj0M3CrJ8CrIFEWT54va\nLIQE+wl++QeYYknhQDIxRw56EQP90OQM50+01VwPkFn5qT/p8ZIhVdgfXaMO\nA+ZN/hnLb3LQ2QARdlNSlvSa844WOMGbg8/sQFy1a5CJJwmmh8y3wzSc8+WD\nafXxmSWd1nGzIxaGWwArgiVOS4Py3bcbL5j1M85gTWylzTa1gsv/rJt1WvQc\nIAKWQLUdy/L57itwUOuTU7gP41NOxNUSI0k7F9O8uyufIiyVl4WoqZyihxjJ\nLxB9x6PyexEZm//MQ83Pn//fJ3DQTOQlw1TQuO7njQRly7FDqgByzTbhvzWo\n/lSn4kq2O1KbC68HJfdZ4cpW5EKE/dBaoOX4YZFEzSix9HyLrBIdKeg4fTYF\nEh+hQHOCZdSYhDxuzDEFL21gfSmbjPORfy9A1MovHarftBoxu0juk1P71Azu\naQuB\r\n=2DwA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC5B8hYLm5UpPpkACZwEnYlRjZ4uv3JRBJq3vcIHwIZAIgeAVpa7NkSNJZ2/ahm9iqiJxkkbakyJZjVPJjIZVfjs4="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19-alpha.7_1585454550356_0.2360185186125261"},"_hasShrinkwrap":false},"0.21.19":{"name":"@react-ssr/core","version":"0.21.19","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"0c704009cd986e96f4e2ac480404e1235c90f577","_id":"@react-ssr/core@0.21.19","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (win32)","dist":{"integrity":"sha512-ca3ieejdBh2GBDDRm0rXQkHzOCYhE0GuCf+aS0xiQbt4qYEO1jx8Vwioj+NRRxUAB6A6tz6MdgbxD7b5Q6nwxw==","shasum":"e7caaa9a66dfedd33b75d8e0348be5e53a8bc5f0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.21.19.tgz","fileCount":46,"unpackedSize":544205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegCR2CRA9TVsSAnZWagAADOwQAIjWy3zUGRy2wtWC4lHm\nibWNvr9tLMXMjuvVUuzmnra+vIYd3j3q63TExMuknUc+JrurqozNJkXUI8zT\nGf6HDgvKZvIqv9IBSNCi3P6BWZQ1c9mBln/AAghqN/T5im2e1KmKb2T3cmJL\n5luH0apsHBqKz/HgvJdMrkrCbebU4MpUJiw7PHb/7gsqsacmWQK8MCrNfaF+\nHeKXXc4rP2ecC1I7QSGq9jqheYbUO1YO9M2cyBwGNw92FZyoDCNI0qvUW6M0\nBM3lamN7XrOhMrRquAke3zaRDpNzn/V6FkyuzNxV+DBWX9r//Q8pEB/nfCAS\np/winDa0LV4Y0v9bbi7bMAQ/diTEvXpfkjpQi5UM5Rjdu0RZjT5uT+wdalGE\nSQ+O1M8eCeoOiTzF8HDBL+i2c+ENC4xl2asz/2GGmJgFBbfigaIiw93YCuBz\nNebWJAcBa+3J/F6qRt7WtJHd+//agv7cmYOVp0ne9vtDulloyCOt+6fv0hAp\nX5UTFaw3DjNGMY8ko6yJu+3+kEhryi1iutKZNe04Tik65fbjsdia8XS4BQ+9\nDLeILH4diCNb5Naa08iqbvMrRCeGs04jfbIRrNyAOoz8b696/CcCTVNyRU4m\nDfzKv0ybshi4DihLPkkuMQX33zQMjngoGu1fkCp1bGPDuPCeTvv3e4vcyMJr\n+zi4\r\n=bXzE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfbNRTwzuB9cS7dPsBuneCj+Pq+Vy4MDZuNn3foTuUywIhAJIf0Rk9WMPqAI/J5ZZBUkVM4r64oEQjwLQ+lyVW7t3C"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.21.19_1585456245520_0.5524788081145973"},"_hasShrinkwrap":false},"0.22.0":{"name":"@react-ssr/core","version":"0.22.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.0","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/register":"^7.9.0","@babel/runtime":"^7.9.2","@babel/runtime-corejs3":"^7.9.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.4.2","fs-extra":"^9.0.0","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","node-sass":"^4.13.1","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^2.3.5","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.42.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@types/cheerio":"^0.22.16","@types/express":"^4.17.2","@types/fs-extra":"^8.1.0","@types/lz-string":"^1.3.33","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.7","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^2.2.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.7","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.2.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"00bbd456f0572dcc5294c7afcaf5bc68e3b08d3b","_id":"@react-ssr/core@0.22.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-uiwckp7KgtPyIOO5/e+orE2JM73fMfd5KJRqTYN6vakHip4E3BLn9egUOFA54eelLyMus1TqBHwJ1RFO85Pt0Q==","shasum":"e0b2cd46585f592a70613d5423a599ca4e603218","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.22.0.tgz","fileCount":46,"unpackedSize":542972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegIUqCRA9TVsSAnZWagAAD+IP/2k3JB7dM7YkTmva3rQR\nIy5Q49xV4OcVPCEpHXhN/tkwHQ26S9XLlFXxfvfSidrmtEUYBklJuwq+zKuM\nNMCJkO2IKUtH2X456cBTBnv3C2Y/PAvuuvzbNCuDN4ImYg+4oskRByhuqEZe\ncevYZsXTvkfmAGuVXGMtfhUyYS2hgjbQyA9M7FOClS6XXp/yzj5w3xuRF0wu\nP1f2tvJtz9LQLWapwnMOhbN7OnEyqizODXtKH4RuzNwsRJvdxelBxNdV1lER\nBWSLCtRVXd67LO+KjdxRbkupgTug+6CSLYUBzz6MQZsumDRp+RVkKYZ5njkx\nBfzszYtB12FepMcvUR5Y11jgbIDshnoES7Un/o41PWEeP9B/8DvAiZXkL700\nM9PCC0MnCXIS2L/JuQNyCMtVTwQOioFhaRjjoeXfrsym4hIWgOpjqAx6HuwJ\n5N8Ast+TjfPXe4s6ZGpRP02F++iOq22xclQmO9jHROkOFLfQwieMKuelKkIZ\nF60Nrcx5P+6SpJpz2TJigk6QRFuaeWYbyIdrkfikmEYIssmeDgbrreM/SK1s\n7CUcNQesCX3JTpRB9nIfRMqzZIvuhOBnliLrzaxsbqvQvzifkbtyFyJPJJv4\nyG0dtUaY/4D5T128tuTiXQWpgdwwE8p+zCWOH35ia1zf5Ls+3HM/87YPE8Jo\npc9x\r\n=c1hX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGdtP6HLS4cGOrFCcpqyjz5A9vezMgzJcw2HVEwamXPAAiAkL237jdHEdmjK6XC7ODcKr5Y+I/J20qNcLbAan3qMDw=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.22.0_1585481001891_0.30101683284541036"},"_hasShrinkwrap":false},"0.22.1":{"name":"@react-ssr/core","version":"0.22.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"9e46b5aded1444d66ef2457553f7030dfecfc9b5","_id":"@react-ssr/core@0.22.1","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-PDmldmcASDgn3HCB3vHq7vbSO9Ld3gaLaKyKtT7SJMuuvyPDlW409FjD8PLBS5HiLv1VjeMNjkuPgFpVJhFT2w==","shasum":"89786c9d362607e89700aba9208bf4fefe66a6d4","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.22.1.tgz","fileCount":46,"unpackedSize":542975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4HsDCRA9TVsSAnZWagAADlwP/1TydPZI8jdrhrzlt4az\nYlcLPKfu1QN2IMUm/WHvkapZkQOXIYGc9blvTDUKMmo2cZOxKSfvyz+zJFc7\njAAkcihsAjIvznXtwYHqBc1cr9BkJ3RGVMLR660o8ianQeei/0jY4zCL2EXJ\ntfzfpZbxUoj8mhS7kKTM3dyQ7jB4I+amd4cJebVEOhDaHZfJJIn++VOxBWGH\nAGPg0gIvlhl1nP40b2i/xqMXKxHJA9EfmG5huIi9/zz4shN5jMHrm+x37j4N\nUTEtD2qKpZD1fAjZtWowRtsGG/Yc1bSsEfkFru5/ayQfYaIBs+IWG8zl3ehg\ncNH74Jmep43jIPt2vS9zSBkE+M2VF4A5nG4R/q/HIMNLhsurhXoCjn6RONs+\nulckf/zChmIUZvMDYxtSnohIlNTuK36oMWR8bEto4XvYGgu3g2n2HlZlrVD3\n2Kl4vE4zzD1qPbC5MntR++zKfK8Dc1n7dHtoJcXTxy6bfBTH44cYTv1b3WaI\nJ2iywVZxhdkPM8KdHfuN18gEN4PoDkuk4MZwHJ2jEViy5+rPGy4O5QSLaUKt\niZa4QFM4Xgu/308dsyajjljEnPq+3cdGncwDxhR/BF2wHyszR7t0yfB0pJmE\nynQDVJOINvTQ9sPim/xxwCPhgB99a4PS/1SEnevdMZYmuyrmGj11YOzjYGwh\nuqUx\r\n=MZx1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD57A/yW4mnhUUJfCMZsQSwEwP+6Eb0odbAjofAWlka1AIhAPonXzvMKKQKqT8ZBk9arYzQ9LOcxq/YuWBAgxEITe1q"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.22.1_1591769859022_0.4930875389759577"},"_hasShrinkwrap":false},"0.23.0":{"name":"@react-ssr/core","version":"0.23.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"52e2ac772bc00dfae297d0a115303bbf4056b9da","_id":"@react-ssr/core@0.23.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-D2yVYaBPmht0tGSoDYLZO/j+H4b3sZ81WsFkxwo+qM2zY6S63kXWRKXR9V2IiX1dlH64m17ZoI4Aw4XagSVpYg==","shasum":"6059a9a085628c0358763b75478c3a1f8373b957","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.0.tgz","fileCount":46,"unpackedSize":542974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4IIXCRA9TVsSAnZWagAAXNAP/2KxVQ2dmcxIIyglQhBU\nzy/SNja0KDHATq2ZKX4Z6BAjkR5Qsw6GZ1w8s85CCsHAVNpaKOkieaPSyEGb\nqXOX7KSxYnMoysdKJDISkoY81L47dkbPAdbezKBKAGRfFYbr70b2fYqt+arB\nLApZT157dndHuPJOHzPp+U65YbwcAbIl/dostNYSTFAtZyG4D34Z14t5VoFQ\n0GNiA7tIs9zUAAFGU9PJZuPz1GxQ5tarvcb3kNIqdzxFb3DNEdFOPojN8KzK\nv4whRruV6oZe6L3q0gGdfqt+kTUyeNAszjmp01DQtYRdiydEqV8IQ9l7z+/B\nzMO6ryoypfyvMAGA7WhwYtLz2daMPL5PVoiWtcPQZpCyaAl4zTwX3af0bozl\n61ScVE0Gt6cLage2gMspL+3FiC8X3Q+hP0gVtkOIiXs0rENHa0BFZjZmRz4R\nCKN0tIjCxnyIVElcVbdbG5IK401nQZM1XvnAjBPqb1577Evx2QamaGB0UHtb\n1LBR3vep66lj9U1Rceq6eTaF/QqJbnoNhN0QU2we4TS7qUO2rKnNb90PNKyB\n8Ia5TXkzFWe0H2dkPwwMcdKZGOcktViag9FIfMRTIWHpr4PdkdrqVpwT28Jp\nYqGcA841CwqNUNOezGFSIFToa/ZDkMTpSCVBzdUccw8JUDonogHGGrV9hdlW\nQT8g\r\n=L0y9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICxDKY7wkUgZ7ZG0UwjGpNMKxNKtygs04wk+Xdkcq3BHAiEAiq9E96JPuO78UlZXHcLltP1qLzmY18qf/PZn3ekNNDg="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.0_1591771671336_0.3581787876306388"},"_hasShrinkwrap":false},"0.23.1":{"name":"@react-ssr/core","version":"0.23.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"83083cf2a4a950945ade6c59e3e51dccb107febb","_id":"@react-ssr/core@0.23.1","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-vqzIEqktR5coDEsel/h0nUz4uob42+i0CmPHDriEjjtujODUeeDwlktuEmaXp8mWvPZIQJKPhJwjEj5zmQFytw==","shasum":"b6daefd8fe0588c0176b04a09e197da34b6680b0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.1.tgz","fileCount":46,"unpackedSize":774423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7SH8CRA9TVsSAnZWagAA4JIP/103rHUuQCoj3WZfqb6X\n2kucUzwzdPqK1m8kK7cr69YCcfqbcNvjNMhL9kMQaoJ9stP5ngFOtWCWtZ1F\nIcNE8JSayg3BVZNqXodgGwVP+olaX1fDXwBUAuGVmOYD9hydV3+5/qF0O53K\n862qrlyMYmP8ko7NnxGs61sB433tW1xdEOgkf8WDWZ1wCQgRb5Fi6u4ynuSK\nu8Qp9erp36/oAaNW3qgwhgVQKHjnQOiZLFvLeuk+5tH2NCVGmFaQzdCurH0B\n3fm9jANEjrGvCa5pSlzqp4hkXxx99Bq5X4ejckwV9HurMelE4VQ4mj/I9pTA\nbUhkpx0IkvSIqbGifqrz1xi+qv31LE5W+HWP3vVftBiRxTbF+F9b7v2Bm5IC\nNixmozYZY8Xbze7Lpramy6gA6Q60LjfD6h/+m5DJTUP/d+1g/wsi+qdhciAa\nrqI1gRTEQwOILY9uwGAA4mWEUK/wcmGNc4ejXS97nvGfmhmjt8CWoTvHSB/i\nwhQJ/ugBbwhoMnT5lqarpufEB4y7ZslQhm0Kuzvav946vujHM9aomqJ268pB\n2mEfRPIHWAPi+ecZB9X1CUDp8ERG/36nx4uLKmoY+fFqsuXAon6hMxKPTm1T\nwEHLjeQvbpbf/Gf5jS2BovaIg2AZA/pORSvnc8T4oS8l777hpD94V+XcqZo0\nbqPb\r\n=hoVW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/Fpa2xpvpb7wzD8mAPGsHuiv2vIH6fb9t/1MMjIaB8AiEAn6Fj2kHx7z/ovG+MR6TZ39UDisVvTylbZSJe9r8G6Gw="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.1_1592599035709_0.8986769843595046"},"_hasShrinkwrap":false},"0.23.2":{"name":"@react-ssr/core","version":"0.23.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"023be9bb2c2b5186158db5591cba042e61d87091","_id":"@react-ssr/core@0.23.2","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-4U28Ohue6+OWyKvkjRvmwMVWwibAblpC6V4UzpYAacdbUyUQ0zBge8AlNDjxCg3Bc7uIyUhHf56gVB55YuhzUA==","shasum":"8fe7e989ad17b95d262786509c91395c19ec2800","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.2.tgz","fileCount":46,"unpackedSize":774475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7SYgCRA9TVsSAnZWagAA2KIP+wRLIM4u8jYBWsr+vJWf\nHBukhhfIeSHJAIy1unKd5cnHbymNugaUNWvOUnj7H2uwqjZcHo3BLex1gBG4\nGX2VB0l/khtI8GbfhX3xUWV5hr/ms9qo5WkxLxi9K8FMbMYcgfmGIuoZ5HFH\nMxHvvYN1+nirpqCedjHWuzyNZZgKFt7VkV7Ee7xDbtSgR7N7o6/oXbTf2Ll6\nLBVpCvXLKvMznUlTNpVYMCji/otJWarzOHqE3K+ggjb6OHrG/ooKZHHpRPo0\nVt36OrskkRNvqrsahH3j129hanGJsYNnb/zePE25zuxpKArt7WEGvcj5SeGU\nIVsXi4xyu27bhoVyw70rc9yHNQDQXtykm7J9A+mzNIwDwECiRbtfDoP38tBi\nDhUKyqiZfc1//HKhuKv7bYAEAtw5gdBxx3tC4N5ptdHUDcQuUwsXW8HKD1GJ\nOIagMQfWGaZ4matDrszyy3YxUDeKD1UGpp+lNMTPDX3sb5YK6MXI72z4yH+O\ni2nOhNvTeZOUf2L9CkUX4Zr8tWupA4v32l+U3Is2toqf/5Jp8z6nstUQQqg8\no9TkE3LhAyzEeY7SV3tZcQ36aNozTJe+IJ1Ru+CJhTc3WjsMz0iHvsehrTni\nOiAdPdTdcU1zDUdvWE6auPFMzXkypRDoUhjeH0W71wwsowgVAP0cp7zRtRFe\nRvCy\r\n=yTdr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBZ2EuYE3Mb91C4j4IB1K9GHxgFM+HXVAsArM2jA+ygAiEAnm3738wM4HDtIUW862cySyV/eYOafXc9zkMhvUedIkY="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.2_1592600095912_0.12704286296725242"},"_hasShrinkwrap":false},"0.23.3-alpha.2":{"name":"@react-ssr/core","version":"0.23.3-alpha.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"046251dcddc367ec3424931af1fdcf559e2c119d","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n### @react-ssr/express\n\n**.jsx**\n\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n**.tsx**\n\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n\n### @react-ssr/nestjs-express\n\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Contact\n\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\n- via [Twitter](https://twitter.com/saltyshiomix)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.23.3-alpha.2","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-QiAVImQ2afOBgOr96mQclQKOg9NzzNWt+QSfAzDWupp95niLIqqISNXbyNd785GUGtflIgmaLkuColNVx0TxdA==","shasum":"64fc28fce3981e731105be8e049696ea3ded6ac8","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.3-alpha.2.tgz","fileCount":46,"unpackedSize":774627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7SesCRA9TVsSAnZWagAAnEQQAKBgiOmmyJLBKwhCrjSI\n3Ozch0u+miQ32pwRwSd5VhgDRDz98yUfCYOGggVy+80jsRNlICt+kw06q1+i\nedomhchY4VwXXgfh3oLB4PZVfE2MRbUxYAMpbAbLg3PpBWr+t0ddJEO+IKEm\nvNy7XioFwL3GJidgjOCRUlNnAOZcugGxlm8JDENYyjBl5WTYFBct0RJ3aiEp\nwlm9A6EQ1YBwNWRjB+H6XiDT9ost+SH1rfDmEnq/sbsigPGh5VZg1xXFHV+2\nGszmMc/rKgeTObKUS6gYBqAq0/cFKw+NUDkIh1WgcER90do7l9HYsdzcQaiW\nJmqskKLejrQ48+qvK4Dz8uVJvfA6CJVueTUYgTzQ1g0SmNn2LGU3nHsFA9TX\nlRxEXlgblkT9EYXy4NPa66pUQdwtVbT/pInARoatSJ3JBvyEX/ZckMJbsXDl\npKGaCjvfMoZliFTBINjWxh5MQ4GA39f4Afy+Ie4nge43EniKdW6wG6pbcI/G\nuALMR7APcCjqi4DgLIhkES2A/SKwYLPpdLd9xd8bj4R2ztsfOkx6xY6kHODM\nnJeBnxQLOOpd3wWA0J3K23cqhWMe/lxwkOq0pa5iHQq3Ixv6wTF8y4C6BhHk\nnb0f7pV/em5gLdHZTqQ/PSD3EFRYKA4Gy9iM1Rn1YYp2rEoZqaAwyvX252SU\nBbiy\r\n=VUFG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE/jnKapdcYcCGi00/pGkkPTq9w/dI1KD/fXFxD8kHovAiBYUtWQQk+zNGWgsD937G4W4+A0v5ZVG8kOH/T9Xbg6Cg=="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.3-alpha.2_1592600491855_0.46225102258048345"},"_hasShrinkwrap":false},"0.23.3-alpha.3":{"name":"@react-ssr/core","version":"0.23.3-alpha.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-react-jsx":"^7.10.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"b502662c9e634a42d0a445c89f972c808de69407","readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n### @react-ssr/express\n\n**.jsx**\n\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n**.tsx**\n\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n\n### @react-ssr/nestjs-express\n\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Contact\n\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\n- via [Twitter](https://twitter.com/saltyshiomix)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.23.3-alpha.3","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-TuXBZflp1JHAZEZ7PnT+D8BX0Sj4A2poyfV0jQluOOn2FivDUVp2U+JuaA2lS0x7DdZEJrBA7ghSERAORm/TgA==","shasum":"c1aab7443c72cb64ee8720dced106eeb26aef819","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.3-alpha.3.tgz","fileCount":46,"unpackedSize":774692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7SmaCRA9TVsSAnZWagAAnnUP/1Z1MPtdzFh/DfejQH0G\nWXKQl49yFapdYZHKoBLnoQ9SFYXi718LYT1q91lhz3FDkMjcRJzFTBv9AFuX\nVM3BNFTj/ywya4/0b45w464xg051RZy2gjwtHPGyAcgTAK0eOD1n0X4b+waG\nnNy0sUeKNzmQlWNyi2ld+hfFI552yWkZpSeE9v/JfAdEkICljA2GX2bmmTEY\n0lBjnWvweHdRtXDe/fzvgAaYL3etUb2hZ9f7LZdmL4Q4f9zIjc0y1g4hB2gP\npVgsqKrDKiU89MybVC/c+HZGw3d+k/oPFQzsZTKgruo/9gCJa5XK5i08rqNX\nWNMa1ZW951UeCPHhd2M3zYbTT8ZMgW8llh5MoDN3UvR6sAq/IArLJBZfXOBQ\nIC85R856d7LUdJ1kH74Yd2/LXeiQfonUtvHrV7p21uB/gG/mww8O91YJwVLm\nWeZaQtUpmy8L9al99wQFQFXA1KUZbsWhi7MxLtSplGoIQeQyqCs/+XO1MMPN\n26mmwlYSfsaN0EoPrTk8iT6s2MNufQy/fTCfT10Lzi7b35fGKw6ESIVnCrXl\ncN4WTOumhaHhMR5JZQ4vqxa2lFdnatgBtcv97IaXoV+rzi/zGJeUaqQ6Qndj\n3/xmRcB0weEKcbjeXTQ4ZtJ/K3mP5VgpTfK2J33ifCvh9raDqDNSIn8qa/+8\n06x2\r\n=NM3u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG97I6I7+RxhhkZdqpbQZkRVVmWZyt6POBzXiPtvmXjlAiEAjudS4jTBUItMLe5oalWpldlFprt37uQaAZAYT5YbSOU="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.3-alpha.3_1592600985763_0.20361293506861555"},"_hasShrinkwrap":false},"0.23.3":{"name":"@react-ssr/core","version":"0.23.3","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-react-jsx":"^7.10.3","@babel/plugin-transform-runtime":"^7.10.1","@babel/preset-env":"^7.10.2","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.1","@babel/runtime":"^7.10.2","@babel/runtime-corejs3":"^7.10.2","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.5.3","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.3","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"82702626ac0c6743a23c827a5cd60705c1adf2dc","_id":"@react-ssr/core@0.23.3","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-F1hw5YtJORj6efNIOFTY28Dlx9hRZ7bGVK1IkrDUeJe2jFobZR6u94Z2k6yei2/ICu3Ap2Qk1jqLCp0zZnWcDw==","shasum":"a2e8e14a4265041128b7354b8aff1af4077a6ff0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.23.3.tgz","fileCount":46,"unpackedSize":774676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7S0/CRA9TVsSAnZWagAAV/UP/3KXe//L8cj9oa9WbwzH\n17+ynm42BYEGSTYnb5ayC5pJkmzjFlbPHR2+5KAu4EZwVWP4wZNcFPqKEJEF\nq2PWnULbXMz5y6K4q4tHEDntsN54schnxLEG4cM34v0sBzY3tsTy4A8kJz1A\nWT0FZuTTKuxfAJLfjnCQp7aMdjca6YXsUpDZmbmN/8pfx27L26AgWNas8mPu\nmz+ajTdtAj8h7dZq5rKzMrkMXTDTpQRJ/sZHHvML7RI6pupcKEX/OW6uPmp0\ng9pLGGjw7H81gYxEHNTWJa7+0LiARw+U58Cm5dLJ5mUWLxfD+rSfcLesC9t7\nPHjVLxkTt22aWpnjjMiPXxIwe4gdv9azLQ9/1wbSvWTQAmn4TMsd6RLj21gO\ndZwtReCdrqpTlzOUOPH8sLL0jmKNL3cUzP7jw9WNYKtmOzVQBUMO/IvCpGSZ\nO054Q24Qd+CzkVC0l2qZ/ovYUAa083WO6X4U5V7nuiOijTOjCcYyfLPTOFKR\nSfc2sPjj5o2cmYhQsBaMpdK9Q38RBelbya3OC13em2JVzZGYx1dk5Tf0yp2w\nbk3YTSbk8YygoldXUiF8K2ljKkgb4HeTDKebKZJOZKPXrZ267N63mxCPPFIx\ntoQU/rana18/57R64P21SJaC1cGE10OIiX8AJ0amXsXyjRuTdH6IxxoAX5yl\nyx0h\r\n=d5ZF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRjdu6jATtZdNchRYL3tIZZRz5uqZTpGRPrUUnYm2msQIhAMKuVIkdN1Kq8voegOBgfOfEUEEjX3OKQznXuffXE3KJ"}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.23.3_1592601918545_0.5459915955255383"},"_hasShrinkwrap":false},"0.24.0":{"name":"@react-ssr/core","version":"0.24.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c","prepublishOnly":"npm run build"},"dependencies":{"@babel/core":"^7.10.3","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-transform-react-jsx":"^7.10.3","@babel/plugin-transform-runtime":"^7.10.3","@babel/preset-env":"^7.10.3","@babel/preset-react":"^7.10.1","@babel/preset-typescript":"^7.10.1","@babel/register":"^7.10.3","@babel/runtime":"^7.10.3","@babel/runtime-corejs3":"^7.10.3","babel-loader":"^8.1.0","babel-plugin-css-modules-transform":"^1.6.2","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-react-remove-prop-types":"^0.4.24","cheerio":"^1.0.0-rc.3","css-loader":"^3.6.0","fs-extra":"^9.0.1","http-proxy-middleware":"^1.0.4","lodash.escaperegexp":"^4.1.2","lz-string":"^1.4.4","memory-fs":"^0.5.0","mini-css-extract-plugin":"^0.9.0","optimize-css-assets-webpack-plugin":"^5.0.3","recursive-readdir":"^2.2.2","sass":"^1.26.8","sass-loader":"^8.0.2","slash":"^3.0.0","terser-webpack-plugin":"^3.0.6","unionfs":"^4.4.0","urlsafe-base64":"^1.0.0","webpack":"^4.43.0","webpack-dev-server":"^3.11.0","webpack-merge":"^4.2.2"},"devDependencies":{"@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.1","@types/cheerio":"^0.22.18","@types/express":"^4.17.6","@types/fs-extra":"^9.0.1","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.2","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^14.0.13","@types/optimize-css-assets-webpack-plugin":"^5.0.1","@types/react":"^16.9.35","@types/react-dom":"^16.9.8","@types/recursive-readdir":"^2.2.0","@types/terser-webpack-plugin":"^3.0.0","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^4.41.17","@types/webpack-dev-server":"^3.11.0","@types/webpack-merge":"^4.1.5","cross-env":"^7.0.2","express":"^4.17.1","react":"^16.13.1","react-dom":"^16.13.1","rimraf":"^3.0.2","rollup":"^2.15.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.5"},"peerDependencies":{"react":"^16","react-dom":"^16"},"gitHead":"8fff8d68212ed10d563fe7b9b0de6ba7000c8bee","_id":"@react-ssr/core@0.24.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","dist":{"integrity":"sha512-VWQACSFG063L82Pg7gne6rm9rl/CK+hMm8hlcWFgiL1OiyT9famgcFmeiMW4yolnhSp4D5exhwNcMYTpQxGn3g==","shasum":"3031cf0321b4760b97106b4afb1a1906eef3fd0a","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.24.0.tgz","fileCount":46,"unpackedSize":774789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7S7nCRA9TVsSAnZWagAAxSoP/ilNOAYx8BSHNnh+EVMb\nU8y4UicmsM6SX0DamOqvPt3jqEbwDOBKnnYz9fYi+pe0yEsR1dTZ+osLZPGd\nzCsv5Z8qSrTEZ8CuE8w3yqzmH2nqMDzSpfKTc0TBaXJ2Grpt5pwg0uc/q3qG\nPyfNjH+EungMu6Kzp/cymzWGf2Z8WUvDGviNWnlmWVrZBE0sX0KCMio48LdY\nh80daP6P0+dqsX6IRfL2Vv/NtFwyEeoS31EyEs+em3Uv8/+DG8a+Nrzwd/5n\ny7UiolcKR5Vm5Fbrg26f3aH+Nb5BKECaTfPc+XI9bfO0NZ43cmenMLcxvlZa\ny89wisd9lzT/8ZLBpR8xNVDnPI0QNWR7WtuPYSmseCC4TbUYTXQDjNkKghu3\n0AbiBBItWsaTVHsHDcfiOALpSb0LWrGiiB1nunwklywKKwjWTRUpFVVsUeGa\npYUU0+dxE3wsG7rkfo9fS+zuct6fZvu/YpTODvm83CEuV25ZUVo/+iCi9Ege\nW6TpgVhJOFU0Q9gmwBQFkqdwSMoftKQgrmgdnLtt2aP82LgAtVtGQKQdqOHm\ndq8txiPpX/BcFtgcJcjN7ux3mAyzkQ38KjFNsjvxgzDfI2VjVlHXcHcvB2wv\nPj+Z4fil8cxo1RvjfiZZInD2hqU5tKlUd64aGVqGXRumNMOdDhppcOVbtwfT\nQoVc\r\n=jw1O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7NBOxME3jmfCri7ClrwQbScjVZ8uAPtKMLt8C6FbZyQIgTY66UHbrDXAcs06ddGOoOwzFhedkYaYjqxoYvuIjDPM="}]},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.24.0_1592602342478_0.19098339312116175"},"_hasShrinkwrap":false},"0.25.0-canary.0":{"name":"@react-ssr/core","version":"0.25.0-canary.0","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"dependencies":{"@babel/core":"7.18.13","@babel/plugin-proposal-class-properties":"7.18.6","@babel/plugin-proposal-object-rest-spread":"7.18.9","@babel/plugin-syntax-dynamic-import":"7.8.3","@babel/plugin-transform-react-jsx":"7.18.10","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.18.10","@babel/preset-react":"7.18.6","@babel/preset-typescript":"7.18.6","@babel/register":"7.18.9","@babel/runtime":"7.18.9","@babel/runtime-corejs3":"7.18.9","babel-loader":"8.2.5","babel-plugin-css-modules-transform":"1.6.2","babel-plugin-react-require":"3.1.3","babel-plugin-transform-react-remove-prop-types":"0.4.24","cheerio":"1.0.0-rc.12","css-loader":"6.7.1","css-minimizer-webpack-plugin":"4.0.0","fs-extra":"10.1.0","http-proxy-middleware":"2.0.6","lodash.escaperegexp":"4.1.2","lz-string":"1.4.4","memory-fs":"0.5.0","mini-css-extract-plugin":"2.6.1","recursive-readdir":"2.2.2","sass":"1.54.8","sass-loader":"13.0.2","slash":"4.0.0","terser-webpack-plugin":"5.3.6","unionfs":"4.4.0","urlsafe-base64":"1.0.0","webpack":"5.74.0","webpack-dev-server":"4.10.1","webpack-merge":"5.8.0"},"devDependencies":{"@rollup/plugin-babel":"^5.3.1","@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^13.3.0","@types/cheerio":"^0.22.31","@types/express":"^4.17.13","@types/fs-extra":"^9.0.13","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.3","@types/node":"^18.7.14","@types/react":"^18.0.18","@types/react-dom":"^18.0.6","@types/recursive-readdir":"^2.2.1","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^5.28.0","cross-env":"^7.0.3","express":"^4.18.1","react":"^18.2.0","react-dom":"^18.2.0","rimraf":"^3.0.2","rollup":"^2.79.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.2"},"peerDependencies":{"react":"16 - 18","react-dom":"16 - 18"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c"},"readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n### @react-ssr/express\n\n**.jsx**\n\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n- [examples/support-yarn2-pnp](https://github.com/saltyshiomix/react-ssr/tree/master/examples/support-yarn2-pnp)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n**.tsx**\n\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n\n### @react-ssr/nestjs-express\n\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Contact\n\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\n- via [Twitter](https://twitter.com/saltyshiomix)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.25.0-canary.0","_integrity":"sha512-XvGCtPrLRBNcHk7LDDq3sQLALFliGhc6Xg+kjMXsheylhAMhjKzlhScjDwuBdQo7W+kKpu+E5l1/rZk9k/DkCg==","_resolved":"/private/var/folders/mv/4xdry6ln4sd2lpr2ys20zj1m0000gp/T/007d7eee37302e913a54d681bd03cf8f/react-ssr-core-0.25.0-canary.0.tgz","_from":"file:react-ssr-core-0.25.0-canary.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-XvGCtPrLRBNcHk7LDDq3sQLALFliGhc6Xg+kjMXsheylhAMhjKzlhScjDwuBdQo7W+kKpu+E5l1/rZk9k/DkCg==","shasum":"328d25935a3686510811ca5a3741a32d9b928da0","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.25.0-canary.0.tgz","fileCount":46,"unpackedSize":1580793,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLivf/p+TbhYsrxkIpAva9vDv7S/TNhskfRrsEe8ZaxgIgdD6TSzgAMcLSc1imJey8ni17vt+Roa1PRegSmvE4YmY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjELjuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqGcw/+Ox0p+IFEzCebRhHXEDcWXsx72hiHYQL8FW+gQy3ehErWFA4Z\r\n0aq7iIIPMpccBY2MzG61+d1lAEV8rjhL8vG+mzsCS3sJPo1X2nMWXOM7Ce+E\r\nAo/3opWCg3/Uj3JJsm80XMHBNJeOlYPQ5ZMJ/YQ/uVEkVYSBbsD+lVGUIMhG\r\n5JmKVkesBLCqtqaVsKdpeu8mGCtZ3OmoUm/QakEoDcdPDfR38/nbup/OYxmh\r\nzPknyv/ju2yctzBf0LvYV1eAkd7J+QjKVNdmjKnmc9LLt1Oi0UGYYiRJrc23\r\nXt3h/s0ibpztg/56KXn2up41b0dZoZmwx6xdV8GEhcs2ZOl7hoH9sYRz5ypi\r\n3uMvFoK+qnsgzfXKY3V2bouciW8dKwEpHUUrYDKa32n4CsMAtkhIhHihzwrC\r\nBlCuyIJG+PNfb0+kzZ5Yz8Wv0t6sYd2WKSXOJgg1hFOwJ3kxTELGFLQOMR9S\r\nSTeAx6/AesryEO40/DLRQSg6lHDKU5dOjkxQ79mNAnbx1bdlCWh5sr5a7YxC\r\nPFZPxVha/9HpPZ0dABO2QFqYdQx9gZffjXo5N9erCpgQYM369z243TWx5MvD\r\njO30qApAcEUmyF5b66il1ycRlKvHitXYzUxTKwqvtx95jZ3+JeZ+/QJMc9UO\r\n+vSydhGTEPJ97ZjI71fAe+X9w/3wtyCQlQE=\r\n=U2BB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.25.0-canary.0_1662040302087_0.5405113875983885"},"_hasShrinkwrap":false},"0.25.0-canary.1":{"name":"@react-ssr/core","version":"0.25.0-canary.1","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"dependencies":{"@babel/core":"7.18.13","@babel/plugin-proposal-class-properties":"7.18.6","@babel/plugin-proposal-object-rest-spread":"7.18.9","@babel/plugin-syntax-dynamic-import":"7.8.3","@babel/plugin-transform-react-jsx":"7.18.10","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.18.10","@babel/preset-react":"7.18.6","@babel/preset-typescript":"7.18.6","@babel/register":"7.18.9","@babel/runtime":"7.18.9","@babel/runtime-corejs3":"7.18.9","babel-loader":"8.2.5","babel-plugin-css-modules-transform":"1.6.2","babel-plugin-react-require":"3.1.3","babel-plugin-transform-react-remove-prop-types":"0.4.24","cheerio":"1.0.0-rc.12","css-loader":"6.7.1","css-minimizer-webpack-plugin":"4.0.0","fs-extra":"10.1.0","http-proxy-middleware":"2.0.6","lodash.escaperegexp":"4.1.2","lz-string":"1.4.4","memory-fs":"0.5.0","mini-css-extract-plugin":"2.6.1","recursive-readdir":"2.2.2","sass":"1.54.8","sass-loader":"13.0.2","slash":"3.0.0","terser-webpack-plugin":"5.3.6","unionfs":"4.4.0","urlsafe-base64":"1.0.0","webpack":"5.74.0","webpack-dev-server":"4.10.1","webpack-merge":"5.8.0"},"devDependencies":{"@rollup/plugin-babel":"^5.3.1","@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^13.3.0","@types/cheerio":"^0.22.31","@types/express":"^4.17.13","@types/fs-extra":"^9.0.13","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.3","@types/node":"^18.7.14","@types/react":"^18.0.18","@types/react-dom":"^18.0.6","@types/recursive-readdir":"^2.2.1","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^5.28.0","cross-env":"^7.0.3","express":"^4.18.1","react":"^18.2.0","react-dom":"^18.2.0","rimraf":"^3.0.2","rollup":"^2.79.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.2"},"peerDependencies":{"react":"16 - 18","react-dom":"16 - 18"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c"},"readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n### @react-ssr/express\n\n**.jsx**\n\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n- [examples/support-yarn2-pnp](https://github.com/saltyshiomix/react-ssr/tree/master/examples/support-yarn2-pnp)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n**.tsx**\n\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n\n### @react-ssr/nestjs-express\n\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Contact\n\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\n- via [Twitter](https://twitter.com/saltyshiomix)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.25.0-canary.1","_integrity":"sha512-s4069rcGsw1US97jW/gr/pdqIVtFiVNOPif43/cQrc5igGcJeOmoZ3Mm6NTpMTzwnBpZPurGSRmItfR/3/zUxQ==","_resolved":"/private/var/folders/mv/4xdry6ln4sd2lpr2ys20zj1m0000gp/T/4b772421d25f2c939309ed8e47c17ca8/react-ssr-core-0.25.0-canary.1.tgz","_from":"file:react-ssr-core-0.25.0-canary.1.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-s4069rcGsw1US97jW/gr/pdqIVtFiVNOPif43/cQrc5igGcJeOmoZ3Mm6NTpMTzwnBpZPurGSRmItfR/3/zUxQ==","shasum":"21287bbddb840e2b6a34d423743e2b156b71ff60","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.25.0-canary.1.tgz","fileCount":46,"unpackedSize":1580793,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrnA8q+eN4AjQZ9isCm1ljsOVlirZBE+KzwBzISEPB6gIgNQk3QnlgckDLkIhsUNQCL67g5m8Y9z1sp2L1vjRjo0Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjELndACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrBCQ//f7n7wjQzqLAPVLAYSaH7BaVLE1DaVqaVet9OlVONyPm8K5Z+\r\nPC61kmsSiV7yHIV6PPBSzIg337+1Jd07Z5hdMjj3pyrGT3WsV391ZnbroL8W\r\n1iHtVlGPXN5gEMh7Y0uMCzdjpseEKXhDX1hb1nCAFKZNc/HaAA+qZtmAhqaG\r\nvKAbNnpgGAXZ2N2ldwFc42PtSdX+fLN/gr+FiPQa0rfj/BVwwvHJjStdG/Uf\r\nfzEwRQ+65ja8W5xXClflGPBU+aEbGCmxj9NzpOnWMIdcx7Kow2nRHMKPf+Jq\r\nPCe+xK59UqSi7HDQmiscTdbd5NmvUkOe7T8cJspq8AitV+hUR2nS0fqfMYae\r\n7vLbtUn/RWpq1QIyaF89YmKl+hJkhn6vqhvR96M7iJQ6NNEdtdTOiWwJA39F\r\nh3sThGJnyKClzac47y3p56zMdZZp9uQT0iYCkA9K5VJYoxnZRKLxCLAUp43f\r\nfT0rPNhJ1m3fygu1MAOXCjj3aDJX/K5I+ZVACtsziALMoRCB1+ww/kRgS+2V\r\nk+MiZAepcNpQP6gl/HQBfwqX4v/RMOv57SeTLI2lRoZlclpKp7vG2a/cXEEd\r\njUHObY7sii+Yt+TAbZ8orS+9sMCILAP7nmmRLYHkfNscmguItHmJz4GaRTTI\r\nSae4OblX2dADlx79DnBdynY9dh44iiYQhyY=\r\n=SUcN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.25.0-canary.1_1662040541616_0.9784078015300479"},"_hasShrinkwrap":false},"0.25.0-canary.2":{"name":"@react-ssr/core","version":"0.25.0-canary.2","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"dependencies":{"@babel/core":"7.18.13","@babel/plugin-proposal-class-properties":"7.18.6","@babel/plugin-proposal-object-rest-spread":"7.18.9","@babel/plugin-syntax-dynamic-import":"7.8.3","@babel/plugin-transform-react-jsx":"7.18.10","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.18.10","@babel/preset-react":"7.18.6","@babel/preset-typescript":"7.18.6","@babel/register":"7.18.9","@babel/runtime":"7.18.9","@babel/runtime-corejs3":"7.18.9","babel-loader":"8.2.5","babel-plugin-css-modules-transform":"1.6.2","babel-plugin-react-require":"3.1.3","babel-plugin-transform-react-remove-prop-types":"0.4.24","cheerio":"1.0.0-rc.12","css-loader":"6.7.1","css-minimizer-webpack-plugin":"4.0.0","fs-extra":"10.1.0","http-proxy-middleware":"2.0.6","lodash.escaperegexp":"4.1.2","lz-string":"1.4.4","memory-fs":"0.5.0","mini-css-extract-plugin":"2.6.1","recursive-readdir":"2.2.2","sass":"1.54.8","sass-loader":"13.0.2","slash":"3.0.0","terser-webpack-plugin":"5.3.6","unionfs":"4.4.0","urlsafe-base64":"1.0.0","webpack":"5.74.0","webpack-dev-server":"4.10.1","webpack-merge":"5.8.0"},"devDependencies":{"@rollup/plugin-babel":"^5.3.1","@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^13.3.0","@types/cheerio":"^0.22.31","@types/express":"^4.17.13","@types/fs-extra":"^9.0.13","@types/lz-string":"^1.3.34","@types/memory-fs":"^0.3.3","@types/node":"^18.7.14","@types/react":"^18.0.18","@types/react-dom":"^18.0.6","@types/recursive-readdir":"^2.2.1","@types/urlsafe-base64":"^1.0.28","@types/webpack":"^5.28.0","cross-env":"^7.0.3","express":"^4.18.1","react":"^18.2.0","react-dom":"^18.2.0","rimraf":"^3.0.2","rollup":"^2.79.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.2"},"peerDependencies":{"react":"16 - 18","react-dom":"16 - 18"},"scripts":{"build":"rimraf dist && rollup -c && cross-env NODE_ENV=production rollup -c"},"readme":"This package is internally used by [@react-ssr/express](https://npm.im/@react-ssr/express) and [@react-ssr/nestjs-express](https://npm.im/@react-ssr/nestjs-express).\n\n## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic `props`\n  - Passing the server data to the React client `props`\n  - Suitable for:\n    - Admin Panels\n    - Blogging\n- Developer Experience\n  - Zero config of webpack and babel\n  - HMR (Hot Module Replacement) both scripts and even if styles when `process.env.NODE_ENV !== 'production'`\n  - Built-in Sass (SCSS) support\n\n## Pros and Cons\n\n### Pros\n\nBecause it is just a view template engine:\n\n- It doesn't need to have any APIs, all we have to do is to pass the server data to the client\n- It supports multiple engines like `.hbs`, `.ejs` and React `.(ts|js)x`\n- We can use [passport](http://www.passportjs.org) authentication as it always is\n\n### Cons\n\n- It is not so performant, because it assembles the whole HTML on each request\n- It does not support **client side routing**\n\n## Packages\n\n| package | version |\n| --- | --- |\n| [@react-ssr/core](https://github.com/saltyshiomix/react-ssr/blob/master/packages/core/README.md) | ![@react-ssr/core](https://img.shields.io/npm/v/@react-ssr/core.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/core.svg) |\n| [@react-ssr/express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/express/README.md) | ![@react-ssr/express](https://img.shields.io/npm/v/@react-ssr/express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/express.svg) |\n| [@react-ssr/nestjs-express](https://github.com/saltyshiomix/react-ssr/blob/master/packages/nestjs-express/README.md) | ![@react-ssr/nestjs-express](https://img.shields.io/npm/v/@react-ssr/nestjs-express.svg) ![downloads](https://img.shields.io/npm/dt/@react-ssr/nestjs-express.svg) |\n\n## Usage\n\n### With @react-ssr/express\n\nInstall it:\n\n```bash\n$ npm install --save @react-ssr/core @react-ssr/express express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`server.js`**:\n\n```js\nconst express = require('express');\nconst register = require('@react-ssr/express/register');\n\nconst app = express();\n\n(async () => {\n  // register `.jsx` or `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req, res) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.jsx`**:\n\n```jsx\nexport default function Index({ message }) {\n  return <p>{message}</p>;\n}\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello World!`.\n\n### With @react-ssr/nestjs-express\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \"dist\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"outDir\": \"dist\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nThen just run `npm start` and go to `http://localhost:3000`, you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom `process.env.NODE_ENV`\n\nIf you set `process.env.REACT_SSR_ENV`, you can separate `process.env.NODE_ENV` from react-ssr:\n\n**package.json**\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=k8s REACT_SSR_ENV=production node dist/main.js\"\n  }\n}\n```\n\n## Custom Babel Config\n\nWe can extends its default `.babelrc` like this:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ]\n}\n```\n\nA working example is here: [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n\n## Custom App\n\nJust put `_app.jsx` or `_app.tsx` into the views root:\n\n**`views/_app.jsx`**:\n\n```jsx\n// we can import global styles or use theming\nimport '../styles/global.scss';\n\nconst App = (props) => {\n  // yes, this `props` contains data passed from the server\n  // and also we can inject additional data into pages\n  const { children, ...rest } = props;\n\n  // we can wrap this PageComponent for persisting layout between page changes\n  const PageComponent = children;\n\n  return <PageComponent {...rest} />;\n};\n\nexport default App;\n```\n\nA working example is here:\n\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n## Custom Document\n\nJust put `_document.jsx` or `_document.tsx` into the views root:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.jsx`**:\n\n```jsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.jsx`**:\n\n```jsx\nimport React from 'react';\nimport { Head } from '@react-ssr/express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.jsx`**:\n\n```jsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@react-ssr/express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## TypeScript Support\n\nTo enable TypeScript engine (`.tsx`), just put `tsconfig.json` in your project root directory.\n\nThe code of TypeScript will be like this:\n\n**`package.json`**:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node server.ts\"\n  }\n}\n```\n\n**`server.ts`**:\n\n```ts\nimport express, { Request, Response } from 'express';\nimport register from '@react-ssr/express/register';\n\nconst app = express();\n\n(async () => {\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.get('/', (req: Request, res: Response) => {\n    const message = 'Hello World!';\n    res.render('index', { message });\n  });\n\n  app.listen(3000, () => {\n    console.log('> Ready on http://localhost:3000');\n  });\n})();\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  message: string;\n}\n\nexport default function Index({ message }: IndexProps) {\n  return <p>{message}</p>;\n}\n```\n\n## Examples\n\n### @react-ssr/express\n\n**.jsx**\n\n- [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n- [examples/basic-custom-app](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-app)\n- [examples/basic-custom-babelrc](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-babelrc)\n- [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n- [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n- [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n- [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n- [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n- [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n- [examples/basic-multiple-view-engines](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-multiple-view-engines)\n- [examples/support-yarn2-pnp](https://github.com/saltyshiomix/react-ssr/tree/master/examples/support-yarn2-pnp)\n- [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n- [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n- [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n- [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n- [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n- [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n**.tsx**\n\n- [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- [examples/with-tsx-redux-todo](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-tsx-redux-todo)\n\n### @react-ssr/nestjs-express\n\n- [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n- [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n\n## Real World Examples\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n- [react-ssr-redux-todo-app](https://github.com/saltyshiomix/react-ssr-redux-todo-app)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Contact\n\n- via [GitHub Issues](https://github.com/saltyshiomix/react-ssr/issues)\n- via [Twitter](https://twitter.com/saltyshiomix)\n","readmeFilename":"README.md","_id":"@react-ssr/core@0.25.0-canary.2","_integrity":"sha512-23cXS2qrUBgivSk+xmumslwF7VqSWlQGoOtTLVg0YT2UZlckc7TMHIWkWNAKCOv1hLXn3Lq6jUwIBVRTcoczFw==","_resolved":"/private/var/folders/mv/4xdry6ln4sd2lpr2ys20zj1m0000gp/T/40e295761194c086f0c18968c4989e63/react-ssr-core-0.25.0-canary.2.tgz","_from":"file:react-ssr-core-0.25.0-canary.2.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-23cXS2qrUBgivSk+xmumslwF7VqSWlQGoOtTLVg0YT2UZlckc7TMHIWkWNAKCOv1hLXn3Lq6jUwIBVRTcoczFw==","shasum":"d6155afe1004af0ac471e579e218d540f44783e6","tarball":"https://registry.npmjs.org/@react-ssr/core/-/core-0.25.0-canary.2.tgz","fileCount":46,"unpackedSize":1581784,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqn4hm8SmRGA16wF+ZRW5xgCtptxYxZr1PML9RqrLamgIhAOWcqtUGlXIaijdWPIQ8bAJpI/2DSbiVF3eTtkopnfx/"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjELr4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9NA/+JumfonuLiO6rys3fDeaBMeFq3FmVVpMrK1bef+0TS971G20D\r\ntIQbEeDKU4Knj23xNLzS+8ANTjip8OqYklkJSIm/xm/5/voWupvQVnFPGMCJ\r\nIMV/t3BtXc4yQhBJAiIXb+psFS/RoJPvWxPUUXSKQC4yNFdSV3ANEqpkWhXw\r\nMziFHiI4BAGkmlvqVdjs2qX4hOlFKRldbkBRuKTQJ+8XMufSxhITTlt+CNzK\r\ntJPfHatad7MXeRPisnpqoXyWFpvNA5fBqynKSmx6eG6ismimny1Tl95wMHXT\r\nR+K+sHAqZz1dU64K+zyBNVg/lOtZKTC2B8HnwQu4eTXKEYkIKl8zd4l35pTI\r\nqOHZznS64EMtzRLY8gQD2YPncicrogrEv+VimNoFFk8PiygA/gtqQO27OL4B\r\njUzai0uATYLNYEBY5LgBaNoKvIgOKY9Y4FE/XhlYrTK+ml/l3o7fUCLizPTl\r\n51B9DYK5fpq1nHNCLW+Il1gwdw15bFRyMkvOybTphnyoYtdXtfhwYBlXSv7+\r\nS4i1W3yoxvNu+kf837eeA35SY5zW04ZtmjZZKeKN0BissoMiXtwLjE4/lhnY\r\nJxwU2R1OxeCrmSiVCKi1MzhPEBxUXqFSeJx2hocByFEly6hv6RrCoUrelX0c\r\naOgxIAMGe6o/patmW5vLiIiB5I+tmybpdAo=\r\n=obwP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"},"directories":{},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_0.25.0-canary.2_1662040824634_0.5677223721906437"},"_hasShrinkwrap":false}},"time":{"created":"2019-10-21T00:09:37.904Z","0.5.7-alpha.4":"2019-10-21T00:09:38.209Z","modified":"2022-09-01T14:00:25.003Z","0.5.7":"2019-10-21T00:17:34.776Z","0.5.8-alpha.0":"2019-10-21T00:23:15.700Z","0.5.8":"2019-10-21T00:53:13.810Z","0.5.9":"2019-10-21T00:57:11.211Z","0.5.10-alpha.3":"2019-10-21T01:24:34.393Z","0.5.10":"2019-10-21T01:25:07.468Z","0.5.11":"2019-10-21T07:17:22.764Z","0.5.12":"2019-10-21T07:33:12.746Z","0.5.13-alpha.0":"2019-10-21T07:34:39.091Z","0.6.0":"2019-10-24T06:30:10.408Z","0.6.1":"2019-10-24T06:40:01.047Z","0.6.2-alpha.6":"2019-10-24T13:50:13.974Z","0.6.2":"2019-10-24T14:14:02.912Z","0.6.3-alpha.0":"2019-10-24T14:35:47.019Z","0.6.3":"2019-10-24T14:59:10.333Z","0.6.4-alpha.1":"2019-10-24T18:54:25.472Z","0.6.4":"2019-10-24T18:55:15.619Z","0.6.5":"2019-10-24T19:00:53.053Z","0.7.0":"2019-10-26T01:26:05.227Z","0.7.1":"2019-10-26T09:31:57.918Z","0.7.2":"2019-10-28T06:46:50.919Z","0.7.3":"2019-10-28T06:56:44.320Z","0.7.4":"2019-10-28T07:01:54.321Z","0.7.5":"2019-10-28T07:05:02.834Z","0.7.6":"2019-10-28T11:56:41.593Z","0.7.7":"2019-10-28T12:16:31.661Z","0.7.8":"2019-10-28T12:29:30.088Z","0.7.9":"2019-10-28T12:42:16.836Z","0.7.10":"2019-10-28T12:52:44.521Z","0.7.11":"2019-10-28T13:32:21.502Z","0.7.12":"2019-10-28T19:18:58.894Z","0.7.13":"2019-10-28T19:26:48.760Z","0.7.14":"2019-10-28T19:35:04.061Z","0.7.15":"2019-10-28T19:37:28.621Z","0.7.16":"2019-10-28T19:41:21.830Z","0.7.17":"2019-10-28T19:44:17.695Z","0.7.18":"2019-10-28T20:09:30.620Z","0.7.19":"2019-10-28T20:12:57.358Z","0.7.20":"2019-10-28T20:16:28.267Z","0.7.21":"2019-10-28T20:18:25.484Z","0.7.22":"2019-10-28T20:30:26.840Z","0.7.23":"2019-10-28T20:35:52.609Z","0.7.24":"2019-10-28T20:39:23.117Z","0.7.25":"2019-10-28T20:50:35.270Z","0.7.26":"2019-10-28T20:56:04.816Z","0.7.27":"2019-10-28T20:59:43.523Z","0.7.28":"2019-10-28T21:10:24.789Z","0.7.29":"2019-10-28T21:13:12.635Z","0.7.30":"2019-10-28T21:17:13.710Z","0.7.31":"2019-10-28T21:24:19.630Z","0.7.32":"2019-10-28T21:26:38.387Z","0.7.33":"2019-10-28T21:31:10.226Z","0.7.34":"2019-10-28T21:33:37.455Z","0.7.35":"2019-10-28T21:36:12.357Z","0.7.36":"2019-10-28T21:38:36.258Z","0.7.37":"2019-10-28T21:41:25.445Z","0.7.38":"2019-10-28T21:45:17.357Z","0.7.39":"2019-10-28T21:52:23.883Z","0.7.40":"2019-10-28T21:54:58.680Z","0.7.41":"2019-10-28T22:19:49.907Z","0.7.42":"2019-10-28T22:33:41.246Z","0.7.43":"2019-10-28T22:41:16.727Z","0.7.44":"2019-10-28T22:47:09.617Z","0.7.45":"2019-10-28T22:49:01.419Z","0.7.46":"2019-10-28T22:51:25.442Z","0.7.47":"2019-10-28T22:56:53.352Z","0.7.48":"2019-10-28T23:03:06.767Z","0.7.49":"2019-10-28T23:07:20.980Z","0.7.50":"2019-10-28T23:12:11.277Z","0.7.51":"2019-10-28T23:17:14.125Z","0.7.52":"2019-10-28T23:19:07.481Z","0.7.53":"2019-10-28T23:21:07.240Z","0.7.54":"2019-10-28T23:24:45.864Z","0.7.55":"2019-10-28T23:28:16.779Z","0.7.56":"2019-10-28T23:30:44.205Z","0.7.57":"2019-10-28T23:35:27.835Z","0.7.58":"2019-10-28T23:42:46.897Z","0.7.59":"2019-10-28T23:49:18.807Z","0.7.60":"2019-10-28T23:54:02.889Z","0.7.61":"2019-10-29T00:06:06.602Z","0.7.62":"2019-10-29T04:11:56.010Z","0.7.68":"2019-10-29T05:24:18.927Z","0.7.69":"2019-10-29T05:32:23.929Z","0.8.0":"2019-10-29T06:08:45.056Z","0.8.1-alpha.25":"2019-11-01T01:10:12.738Z","0.8.1-alpha.26":"2019-11-01T01:16:32.123Z","0.8.1-alpha.27":"2019-11-01T01:22:07.026Z","0.8.1-alpha.28":"2019-11-01T01:25:08.786Z","0.8.1-alpha.29":"2019-11-01T01:29:02.415Z","0.8.1-alpha.30":"2019-11-01T01:43:49.550Z","0.9.0":"2019-11-01T02:47:17.131Z","0.9.1":"2019-11-01T02:50:51.342Z","0.9.2":"2019-11-01T03:08:24.381Z","0.9.3":"2019-11-01T03:18:39.531Z","0.9.4":"2019-11-01T03:23:42.906Z","0.9.5":"2019-11-01T03:26:15.661Z","0.9.6":"2019-11-01T03:36:19.294Z","0.9.7":"2019-11-01T03:38:46.122Z","0.9.8":"2019-11-01T03:44:44.217Z","0.9.9":"2019-11-01T03:46:58.112Z","0.9.10":"2019-11-01T03:52:21.542Z","0.9.11":"2019-11-01T03:54:03.655Z","0.9.12":"2019-11-01T03:56:32.464Z","0.9.13":"2019-11-01T04:02:43.591Z","0.9.14":"2019-11-01T04:08:03.561Z","0.9.15-alpha.3":"2019-11-01T05:18:03.251Z","0.9.15-alpha.5":"2019-11-01T05:21:52.822Z","0.9.15-alpha.7":"2019-11-01T05:29:04.127Z","0.9.15-alpha.8":"2019-11-01T05:31:53.629Z","0.9.15-alpha.10":"2019-11-01T05:38:14.722Z","0.9.15-alpha.11":"2019-11-01T05:40:14.927Z","0.9.15-alpha.13":"2019-11-01T05:52:22.442Z","0.9.15-alpha.15":"2019-11-01T05:54:52.791Z","0.9.15-alpha.16":"2019-11-01T06:00:19.350Z","0.9.15-alpha.17":"2019-11-01T06:02:42.583Z","0.9.15-alpha.18":"2019-11-01T06:04:25.383Z","0.9.15-alpha.19":"2019-11-01T06:05:55.343Z","0.9.15-alpha.20":"2019-11-01T06:28:23.801Z","0.9.15-alpha.21":"2019-11-01T06:30:32.267Z","0.9.15-alpha.22":"2019-11-01T06:32:55.354Z","0.9.15-alpha.23":"2019-11-01T06:46:50.939Z","0.9.15-alpha.24":"2019-11-01T07:07:53.413Z","0.9.15-alpha.26":"2019-11-01T07:12:17.752Z","0.9.15-alpha.27":"2019-11-01T07:13:26.451Z","0.9.15-alpha.28":"2019-11-01T07:18:48.088Z","0.9.15-alpha.29":"2019-11-01T07:42:58.428Z","0.9.15-alpha.30":"2019-11-01T07:46:36.692Z","0.9.15-alpha.31":"2019-11-01T07:50:50.907Z","0.9.15-alpha.32":"2019-11-01T08:01:34.993Z","0.9.15-alpha.33":"2019-11-01T08:04:56.260Z","0.9.15-alpha.34":"2019-11-01T08:21:46.972Z","0.9.15-alpha.35":"2019-11-01T08:23:33.973Z","0.9.15-alpha.36":"2019-11-01T08:30:49.133Z","0.9.15-alpha.37":"2019-11-01T08:47:07.186Z","0.9.15-alpha.38":"2019-11-01T08:55:29.814Z","0.10.0":"2019-11-01T09:19:34.459Z","0.10.1":"2019-11-01T09:30:52.219Z","0.10.2-alpha.0":"2019-11-01T11:46:37.255Z","0.10.2-alpha.1":"2019-11-01T11:53:06.500Z","0.10.2-alpha.2":"2019-11-01T11:56:10.301Z","0.10.2-alpha.4":"2019-11-01T12:00:57.646Z","0.10.2-alpha.5":"2019-11-01T12:12:48.221Z","0.10.2-alpha.6":"2019-11-01T12:14:23.521Z","0.10.2-alpha.7":"2019-11-01T12:20:08.075Z","0.10.2-alpha.8":"2019-11-01T12:28:25.431Z","0.10.2-alpha.9":"2019-11-01T12:30:20.966Z","0.10.2-alpha.10":"2019-11-01T12:32:25.350Z","0.10.2-alpha.11":"2019-11-01T12:33:44.325Z","0.10.2-alpha.12":"2019-11-01T12:36:33.628Z","0.10.2-alpha.13":"2019-11-01T12:43:20.655Z","0.10.2-alpha.14":"2019-11-01T12:52:05.630Z","0.10.2-alpha.15":"2019-11-01T12:54:41.989Z","0.10.2-alpha.16":"2019-11-01T12:58:26.647Z","0.10.2-alpha.17":"2019-11-01T13:00:32.022Z","0.10.2-alpha.18":"2019-11-01T13:02:27.407Z","0.10.2-alpha.19":"2019-11-01T13:08:30.340Z","0.10.2-alpha.20":"2019-11-01T13:09:34.719Z","0.10.2-alpha.21":"2019-11-01T13:13:09.561Z","0.10.2-alpha.22":"2019-11-01T13:19:50.821Z","0.10.2-alpha.23":"2019-11-01T13:20:59.541Z","0.10.2-alpha.24":"2019-11-01T13:28:23.240Z","0.10.2-alpha.25":"2019-11-01T13:37:40.205Z","0.10.2-alpha.26":"2019-11-01T13:40:08.832Z","0.10.2-alpha.27":"2019-11-01T13:49:27.323Z","0.10.2-alpha.28":"2019-11-01T13:52:02.326Z","0.10.2-alpha.29":"2019-11-01T13:53:36.097Z","0.10.2-alpha.30":"2019-11-01T13:56:40.286Z","0.10.2-alpha.31":"2019-11-01T13:59:12.092Z","0.10.2-alpha.32":"2019-11-01T14:01:15.996Z","0.10.2-alpha.33":"2019-11-01T14:03:37.331Z","0.10.2-alpha.34":"2019-11-01T14:12:48.663Z","0.10.2-alpha.35":"2019-11-01T14:14:15.706Z","0.10.2-alpha.36":"2019-11-01T14:16:18.168Z","0.10.2-alpha.37":"2019-11-01T14:19:08.242Z","0.10.2-alpha.38":"2019-11-01T14:23:16.227Z","0.10.2":"2019-11-01T14:27:24.908Z","0.10.3":"2019-11-02T01:59:54.564Z","0.10.4":"2019-11-02T02:12:35.348Z","0.10.5-alpha.1":"2019-11-02T10:23:48.112Z","0.10.5-alpha.2":"2019-11-02T10:26:22.769Z","0.10.5-alpha.3":"2019-11-02T10:28:45.527Z","0.10.5-alpha.4":"2019-11-02T10:30:36.949Z","0.10.5-alpha.5":"2019-11-02T10:34:27.613Z","0.10.5-alpha.6":"2019-11-02T10:35:49.592Z","0.10.5-alpha.7":"2019-11-02T10:37:30.618Z","0.10.5-alpha.8":"2019-11-02T10:38:58.922Z","0.10.5-alpha.9":"2019-11-02T10:42:41.015Z","0.10.5-alpha.11":"2019-11-02T10:51:41.179Z","0.10.5-alpha.12":"2019-11-02T10:55:14.531Z","0.10.5-alpha.13":"2019-11-02T10:57:10.446Z","0.10.5-alpha.14":"2019-11-02T10:59:56.378Z","0.10.5-alpha.15":"2019-11-02T11:03:58.613Z","0.10.5-alpha.16":"2019-11-02T11:10:46.736Z","0.10.5-alpha.17":"2019-11-02T11:19:23.467Z","0.10.5-alpha.18":"2019-11-02T12:01:48.855Z","0.10.5-alpha.19":"2019-11-02T12:07:37.618Z","0.10.5-alpha.20":"2019-11-02T12:11:22.183Z","0.10.5-alpha.21":"2019-11-02T12:14:19.386Z","0.10.5-alpha.22":"2019-11-02T12:16:16.522Z","0.10.5-alpha.23":"2019-11-02T12:25:54.588Z","0.10.5-alpha.24":"2019-11-02T12:31:50.758Z","0.10.5-alpha.25":"2019-11-02T13:12:11.115Z","0.10.5-alpha.26":"2019-11-02T13:18:11.078Z","0.10.5-alpha.27":"2019-11-02T13:19:59.347Z","0.10.5-alpha.28":"2019-11-02T13:22:00.945Z","0.10.5-alpha.29":"2019-11-02T13:37:33.174Z","0.10.5-alpha.30":"2019-11-02T13:40:50.893Z","0.10.5-alpha.31":"2019-11-02T13:43:17.755Z","0.10.5-alpha.32":"2019-11-02T13:46:16.425Z","0.10.5-alpha.33":"2019-11-02T13:50:13.733Z","0.10.5-alpha.34":"2019-11-02T13:52:26.337Z","0.10.5-alpha.35":"2019-11-02T13:59:55.131Z","0.10.5-alpha.36":"2019-11-02T14:02:35.837Z","0.10.5-alpha.37":"2019-11-02T14:04:39.664Z","0.10.5-alpha.38":"2019-11-02T14:13:52.289Z","0.10.5-alpha.39":"2019-11-02T14:54:07.055Z","0.10.5-alpha.41":"2019-11-02T14:56:01.380Z","0.10.5-alpha.43":"2019-11-02T15:05:18.791Z","0.10.5-alpha.44":"2019-11-02T15:11:47.063Z","0.10.5-alpha.45":"2019-11-02T15:15:38.788Z","0.10.5-alpha.46":"2019-11-02T15:18:09.378Z","0.10.5-alpha.47":"2019-11-02T15:21:59.792Z","0.10.5-alpha.48":"2019-11-02T15:24:20.853Z","0.10.5-alpha.49":"2019-11-02T15:26:38.603Z","0.10.5-alpha.50":"2019-11-02T15:28:43.924Z","0.10.5-alpha.51":"2019-11-02T15:31:29.599Z","0.10.5-alpha.52":"2019-11-02T15:35:00.835Z","0.10.5-alpha.53":"2019-11-02T15:36:58.307Z","0.10.5-alpha.54":"2019-11-02T15:38:35.914Z","0.10.5-alpha.55":"2019-11-02T15:40:04.678Z","0.10.5-alpha.56":"2019-11-02T15:41:49.349Z","0.10.5-alpha.57":"2019-11-02T15:47:00.035Z","0.10.5-alpha.58":"2019-11-02T15:49:30.132Z","0.10.5-alpha.59":"2019-11-02T15:52:14.078Z","0.10.5-alpha.60":"2019-11-02T15:57:14.654Z","0.10.5-alpha.61":"2019-11-02T16:19:41.714Z","0.10.5-alpha.62":"2019-11-02T16:21:48.593Z","0.10.5-alpha.63":"2019-11-02T16:26:37.564Z","0.10.5-alpha.64":"2019-11-02T16:29:55.683Z","0.10.5-alpha.65":"2019-11-02T16:38:33.957Z","0.10.5":"2019-11-02T16:41:52.926Z","0.10.6-alpha.1":"2019-11-05T09:04:32.691Z","0.10.6-alpha.2":"2019-11-05T09:09:01.077Z","0.10.6-alpha.4":"2019-11-05T09:15:41.683Z","0.10.6":"2019-11-05T09:40:54.132Z","0.10.7":"2019-11-05T15:21:17.422Z","0.10.9-alpha.6":"2019-11-10T17:09:07.633Z","0.10.9":"2019-11-10T17:13:57.149Z","0.10.10-alpha.0":"2019-11-10T18:32:20.008Z","0.10.10-alpha.1":"2019-11-10T18:34:50.031Z","0.10.10-alpha.2":"2019-11-10T18:38:30.555Z","0.10.10-alpha.3":"2019-11-10T18:39:26.908Z","0.10.10-alpha.4":"2019-11-10T18:50:55.376Z","0.10.10-alpha.5":"2019-11-10T19:29:16.148Z","0.10.10-alpha.6":"2019-11-10T19:33:00.877Z","0.10.10-alpha.7":"2019-11-10T19:37:12.976Z","0.10.10-alpha.8":"2019-11-10T19:41:31.865Z","0.10.10-alpha.9":"2019-11-10T19:43:37.958Z","0.10.10-alpha.10":"2019-11-10T19:47:01.089Z","0.10.10-alpha.11":"2019-11-10T19:49:39.558Z","0.10.10-alpha.12":"2019-11-10T19:54:07.199Z","0.10.10-alpha.13":"2019-11-10T19:59:23.771Z","0.10.10-alpha.14":"2019-11-10T20:05:20.999Z","0.10.10-alpha.15":"2019-11-10T20:07:19.283Z","0.10.10-alpha.16":"2019-11-10T20:11:29.748Z","0.10.10-alpha.17":"2019-11-10T20:13:11.382Z","0.10.10-alpha.18":"2019-11-10T20:16:49.791Z","0.10.10-alpha.19":"2019-11-10T20:25:46.609Z","0.10.10-alpha.20":"2019-11-10T20:29:47.519Z","0.10.10-alpha.21":"2019-11-10T20:31:09.268Z","0.10.10-alpha.22":"2019-11-10T20:37:04.482Z","0.10.10-alpha.23":"2019-11-10T20:38:38.720Z","0.10.10-alpha.24":"2019-11-10T20:40:55.822Z","0.10.10-alpha.25":"2019-11-10T20:46:53.123Z","0.10.10-alpha.26":"2019-11-10T20:58:16.028Z","0.10.10-alpha.27":"2019-11-10T21:00:19.623Z","0.10.10-alpha.29":"2019-11-10T21:04:41.925Z","0.10.10-alpha.30":"2019-11-10T21:06:00.999Z","0.10.10-alpha.31":"2019-11-10T21:08:07.209Z","0.10.10-alpha.32":"2019-11-10T21:08:55.355Z","0.10.10-alpha.33":"2019-11-10T21:10:54.760Z","0.10.10-alpha.34":"2019-11-10T21:12:19.396Z","0.10.10-alpha.35":"2019-11-10T21:22:52.697Z","0.10.10-alpha.36":"2019-11-10T21:33:47.170Z","0.10.10-alpha.37":"2019-11-10T21:40:41.341Z","0.10.10-alpha.38":"2019-11-10T21:52:25.374Z","0.10.10-alpha.39":"2019-11-10T21:55:46.637Z","0.10.10-alpha.40":"2019-11-11T03:50:23.372Z","0.10.10-alpha.44":"2019-11-11T04:06:40.353Z","0.10.10-alpha.45":"2019-11-11T04:13:53.307Z","0.10.10-alpha.46":"2019-11-11T04:16:26.508Z","0.10.10-alpha.47":"2019-11-11T04:18:23.304Z","0.10.10-alpha.48":"2019-11-11T04:32:10.876Z","0.10.10-alpha.49":"2019-11-11T04:34:59.026Z","0.10.10-alpha.50":"2019-11-11T04:42:33.734Z","0.10.10-alpha.51":"2019-11-11T04:47:25.139Z","0.10.10-alpha.52":"2019-11-11T04:51:08.702Z","0.10.10-alpha.53":"2019-11-11T04:52:16.036Z","0.10.10-alpha.54":"2019-11-11T04:54:40.021Z","0.10.10-alpha.55":"2019-11-11T04:57:49.948Z","0.10.10-alpha.56":"2019-11-11T05:03:40.467Z","0.10.10-alpha.58":"2019-11-11T05:06:33.101Z","0.10.10-alpha.59":"2019-11-11T05:22:23.252Z","0.10.10-alpha.60":"2019-11-11T06:27:11.521Z","0.10.10-alpha.61":"2019-11-11T06:36:32.408Z","0.10.10-alpha.62":"2019-11-11T06:38:31.795Z","0.10.10-alpha.63":"2019-11-11T08:45:06.167Z","0.10.10-alpha.64":"2019-11-11T08:48:00.459Z","0.10.10-alpha.65":"2019-11-11T08:50:14.229Z","0.10.10-alpha.66":"2019-11-11T08:52:55.692Z","0.10.10-alpha.67":"2019-11-11T08:57:38.227Z","0.10.10-alpha.68":"2019-11-11T08:59:39.370Z","0.10.10-alpha.69":"2019-11-11T09:05:09.603Z","0.10.10-alpha.70":"2019-11-11T09:11:58.982Z","0.10.10-alpha.71":"2019-11-11T09:25:15.241Z","0.10.10-alpha.72":"2019-11-11T09:33:55.674Z","0.10.10-alpha.73":"2019-11-11T09:39:35.937Z","0.10.10-alpha.74":"2019-11-11T09:40:56.072Z","0.10.10-alpha.75":"2019-11-11T09:53:44.236Z","0.10.10-alpha.76":"2019-11-11T09:59:18.126Z","0.10.10-alpha.77":"2019-11-11T10:08:32.246Z","0.10.10-alpha.78":"2019-11-11T10:10:31.964Z","0.10.10-alpha.79":"2019-11-11T10:12:31.027Z","0.10.10-alpha.80":"2019-11-11T10:16:10.829Z","0.10.10-alpha.81":"2019-11-11T10:21:53.714Z","0.10.10-alpha.82":"2019-11-11T10:25:55.466Z","0.10.10-alpha.83":"2019-11-11T10:29:18.418Z","0.10.10-alpha.84":"2019-11-11T10:34:33.470Z","0.10.10-alpha.85":"2019-11-11T10:36:15.389Z","0.10.10-alpha.86":"2019-11-11T10:38:39.420Z","0.10.10-alpha.87":"2019-11-11T10:42:28.398Z","0.10.10-alpha.88":"2019-11-11T10:45:06.559Z","0.10.10-alpha.89":"2019-11-11T10:49:42.344Z","0.10.10-alpha.90":"2019-11-11T10:52:30.885Z","0.10.10-alpha.91":"2019-11-11T10:54:34.130Z","0.10.10-alpha.92":"2019-11-11T10:57:36.869Z","0.10.10-alpha.93":"2019-11-11T10:59:18.698Z","0.10.10-alpha.94":"2019-11-11T11:03:14.308Z","0.10.10-alpha.95":"2019-11-11T11:07:43.541Z","0.10.10-alpha.96":"2019-11-11T11:16:03.618Z","0.10.10-alpha.97":"2019-11-11T11:31:33.806Z","0.10.10-alpha.98":"2019-11-11T11:36:15.524Z","0.10.10-alpha.99":"2019-11-11T11:41:06.185Z","0.10.10-alpha.100":"2019-11-11T11:44:01.141Z","0.10.10-alpha.101":"2019-11-11T11:48:22.318Z","0.10.10-alpha.102":"2019-11-11T11:50:09.263Z","0.10.10-alpha.103":"2019-11-11T11:54:22.500Z","0.10.10-alpha.104":"2019-11-11T11:58:01.531Z","0.10.10-alpha.105":"2019-11-11T12:07:29.709Z","0.10.10-alpha.106":"2019-11-11T12:13:20.554Z","0.10.10-alpha.107":"2019-11-11T12:17:55.237Z","0.10.10-alpha.108":"2019-11-11T12:21:43.060Z","0.11.0":"2019-11-11T13:13:57.215Z","0.11.1-alpha.1":"2019-11-11T13:27:54.807Z","0.11.1-alpha.2":"2019-11-11T13:39:35.378Z","0.11.1-alpha.3":"2019-11-11T13:44:56.348Z","0.11.1-alpha.4":"2019-11-11T14:00:18.762Z","0.11.1-alpha.5":"2019-11-11T14:05:11.596Z","0.11.1-alpha.6":"2019-11-11T14:09:55.284Z","0.11.1-alpha.7":"2019-11-11T14:16:25.692Z","0.11.1":"2019-11-11T14:18:48.191Z","0.11.2-alpha.0":"2019-11-11T14:28:08.027Z","0.11.2-alpha.1":"2019-11-11T14:38:16.079Z","0.11.2-alpha.2":"2019-11-11T14:40:01.144Z","0.11.2-alpha.3":"2019-11-11T14:48:19.712Z","0.11.2-alpha.4":"2019-11-11T14:49:50.133Z","0.11.2-alpha.5":"2019-11-11T14:52:21.698Z","0.11.2-alpha.6":"2019-11-11T14:54:19.247Z","0.11.2-alpha.7":"2019-11-11T15:01:02.669Z","0.11.2-alpha.8":"2019-11-11T15:02:47.663Z","0.11.2-alpha.9":"2019-11-11T15:05:35.370Z","0.11.2":"2019-11-11T15:11:49.254Z","0.11.3-alpha.0":"2019-11-11T15:15:37.858Z","0.11.3-alpha.1":"2019-11-11T15:18:15.423Z","0.11.3-alpha.2":"2019-11-11T15:21:42.776Z","0.11.3-alpha.3":"2019-11-11T16:14:19.577Z","0.11.3-alpha.4":"2019-11-11T16:25:46.023Z","0.11.3-alpha.5":"2019-11-11T22:39:24.450Z","0.11.3-alpha.6":"2019-11-11T22:42:17.483Z","0.11.3-alpha.7":"2019-11-11T22:54:59.948Z","0.11.3-alpha.8":"2019-11-11T22:58:49.343Z","0.11.3-alpha.9":"2019-11-11T23:14:43.974Z","0.11.3-alpha.10":"2019-11-11T23:19:18.081Z","0.11.3-alpha.11":"2019-11-11T23:21:43.331Z","0.11.3-alpha.12":"2019-11-11T23:23:43.775Z","0.11.3-alpha.13":"2019-11-11T23:33:33.778Z","0.11.3-alpha.14":"2019-11-11T23:34:52.332Z","0.11.3-alpha.15":"2019-11-11T23:37:21.868Z","0.11.3-alpha.16":"2019-11-11T23:38:26.947Z","0.11.3-alpha.17":"2019-11-11T23:42:38.782Z","0.11.3-alpha.18":"2019-11-11T23:44:14.235Z","0.11.3-alpha.19":"2019-11-11T23:46:08.583Z","0.11.3-alpha.20":"2019-11-11T23:47:22.655Z","0.11.3-alpha.21":"2019-11-11T23:49:03.432Z","0.11.3-alpha.22":"2019-11-11T23:50:30.616Z","0.11.3-alpha.23":"2019-11-11T23:52:42.976Z","0.11.3-alpha.24":"2019-11-11T23:55:34.852Z","0.11.3-alpha.25":"2019-11-11T23:58:23.732Z","0.11.3-alpha.26":"2019-11-12T00:11:39.686Z","0.11.3-alpha.27":"2019-11-12T00:13:31.784Z","0.11.3-alpha.28":"2019-11-12T00:15:34.178Z","0.11.3-alpha.29":"2019-11-12T00:18:07.116Z","0.11.3-alpha.30":"2019-11-12T00:19:59.294Z","0.11.3-alpha.31":"2019-11-12T00:22:20.302Z","0.11.3-alpha.32":"2019-11-12T00:24:57.874Z","0.11.3-alpha.33":"2019-11-12T00:43:32.391Z","0.11.3-alpha.34":"2019-11-12T00:44:58.898Z","0.11.3-alpha.35":"2019-11-12T00:54:50.847Z","0.11.3-alpha.36":"2019-11-12T01:02:35.693Z","0.11.3-alpha.37":"2019-11-12T01:07:53.356Z","0.11.3-alpha.38":"2019-11-12T01:19:46.472Z","0.11.3-alpha.39":"2019-11-12T01:21:05.160Z","0.11.3-alpha.40":"2019-11-12T01:22:14.775Z","0.11.3-alpha.41":"2019-11-12T01:24:21.021Z","0.11.3-alpha.42":"2019-11-12T01:27:15.509Z","0.11.3-alpha.43":"2019-11-12T01:29:07.707Z","0.11.3-alpha.44":"2019-11-12T01:30:05.739Z","0.11.3-alpha.45":"2019-11-12T01:34:27.964Z","0.11.3-alpha.46":"2019-11-12T01:37:12.683Z","0.11.3-alpha.47":"2019-11-12T01:40:29.690Z","0.11.3-alpha.48":"2019-11-12T01:45:13.580Z","0.11.3-alpha.49":"2019-11-12T01:46:44.046Z","0.11.3-alpha.50":"2019-11-12T01:47:47.737Z","0.11.3-alpha.51":"2019-11-12T01:49:15.138Z","0.11.3-alpha.52":"2019-11-12T02:02:14.269Z","0.11.3-alpha.53":"2019-11-12T02:04:29.624Z","0.11.3-alpha.54":"2019-11-12T02:07:09.170Z","0.11.3-alpha.55":"2019-11-12T02:13:08.149Z","0.11.3-alpha.56":"2019-11-12T02:15:10.855Z","0.11.3-alpha.57":"2019-11-12T02:17:57.478Z","0.11.3-alpha.58":"2019-11-12T02:33:07.299Z","0.11.3":"2019-11-12T02:50:23.560Z","0.11.4-alpha.0":"2019-11-12T05:36:34.321Z","0.11.4-alpha.1":"2019-11-12T06:03:31.379Z","0.11.4-alpha.2":"2019-11-12T06:16:45.293Z","0.11.4-alpha.3":"2019-11-12T06:19:41.238Z","0.11.4-alpha.4":"2019-11-12T06:31:45.201Z","0.11.4-alpha.5":"2019-11-12T06:41:52.109Z","0.11.4-alpha.6":"2019-11-12T06:44:38.110Z","0.11.4-alpha.7":"2019-11-12T06:48:11.344Z","0.11.4-alpha.8":"2019-11-12T06:50:38.411Z","0.11.4-alpha.9":"2019-11-12T06:53:08.919Z","0.11.4-alpha.10":"2019-11-12T06:56:54.028Z","0.11.4-alpha.11":"2019-11-12T07:03:26.267Z","0.11.4-alpha.12":"2019-11-12T07:06:34.802Z","0.11.4-alpha.13":"2019-11-12T07:07:52.074Z","0.11.4-alpha.14":"2019-11-12T07:12:37.573Z","0.11.4-alpha.15":"2019-11-12T07:16:32.551Z","0.11.4-alpha.16":"2019-11-12T07:19:37.076Z","0.11.4-alpha.17":"2019-11-12T07:25:18.912Z","0.11.4-alpha.18":"2019-11-12T07:29:53.827Z","0.11.4-alpha.19":"2019-11-12T07:32:06.240Z","0.11.4-alpha.20":"2019-11-12T07:36:03.875Z","0.11.4-alpha.21":"2019-11-12T07:38:17.448Z","0.11.4-alpha.22":"2019-11-12T07:54:49.399Z","0.11.4-alpha.23":"2019-11-12T07:56:38.334Z","0.11.4-alpha.24":"2019-11-12T07:59:27.450Z","0.11.4-alpha.25":"2019-11-12T08:11:10.415Z","0.11.4":"2019-11-12T08:24:19.411Z","0.11.5-alpha.0":"2019-11-13T03:50:35.686Z","0.11.5-alpha.1":"2019-11-13T03:57:03.166Z","0.11.5-alpha.2":"2019-11-13T03:59:59.474Z","0.11.5":"2019-11-13T04:07:29.157Z","0.11.6-alpha.1":"2019-11-14T06:51:02.474Z","0.11.6-alpha.2":"2019-11-14T06:53:28.297Z","0.11.6-alpha.3":"2019-11-14T06:57:20.576Z","0.11.6-alpha.4":"2019-11-14T07:15:13.134Z","0.11.6-alpha.5":"2019-11-14T07:16:58.342Z","0.11.6-alpha.6":"2019-11-14T07:18:33.546Z","0.11.6-alpha.7":"2019-11-14T07:39:14.094Z","0.11.6-alpha.8":"2019-11-14T07:40:43.177Z","0.11.6-alpha.9":"2019-11-14T07:41:27.391Z","0.11.6-alpha.10":"2019-11-14T07:42:54.937Z","0.11.6-alpha.11":"2019-11-14T07:44:20.569Z","0.11.6-alpha.12":"2019-11-14T07:47:27.738Z","0.11.6-alpha.13":"2019-11-14T07:48:54.770Z","0.11.6-alpha.14":"2019-11-14T07:56:31.386Z","0.11.6-alpha.15":"2019-11-14T07:58:37.495Z","0.11.6-alpha.16":"2019-11-14T08:04:16.605Z","0.11.6-alpha.17":"2019-11-14T08:07:42.286Z","0.11.6-alpha.18":"2019-11-14T08:10:16.600Z","0.11.6-alpha.19":"2019-11-14T08:13:32.114Z","0.11.6-alpha.20":"2019-11-14T08:15:59.697Z","0.11.6-alpha.21":"2019-11-14T08:24:07.910Z","0.11.6-alpha.22":"2019-11-14T08:26:35.807Z","0.11.6-alpha.23":"2019-11-14T08:27:57.967Z","0.11.6-alpha.24":"2019-11-14T08:38:39.329Z","0.11.6-alpha.25":"2019-11-14T08:40:09.011Z","0.11.6-alpha.26":"2019-11-14T08:41:28.945Z","0.11.6-alpha.27":"2019-11-14T08:43:37.276Z","0.11.6-alpha.28":"2019-11-14T08:47:08.569Z","0.11.6-alpha.29":"2019-11-14T11:44:37.216Z","0.11.6-alpha.30":"2019-11-14T11:48:03.835Z","0.11.6-alpha.31":"2019-11-14T12:01:43.969Z","0.11.6-alpha.32":"2019-11-14T12:04:45.779Z","0.11.6-alpha.33":"2019-11-14T12:16:10.042Z","0.11.6-alpha.34":"2019-11-14T12:17:46.045Z","0.11.6-alpha.35":"2019-11-14T12:23:50.642Z","0.11.6-alpha.36":"2019-11-14T12:26:58.998Z","0.11.6-alpha.37":"2019-11-14T12:33:06.696Z","0.11.6-alpha.38":"2019-11-14T12:47:42.862Z","0.11.6-alpha.39":"2019-11-14T12:51:02.868Z","0.11.6-alpha.40":"2019-11-14T12:55:18.971Z","0.11.6-alpha.41":"2019-11-14T12:57:01.669Z","0.11.6-alpha.42":"2019-11-14T12:59:15.793Z","0.11.6-alpha.43":"2019-11-14T13:01:43.651Z","0.11.6-alpha.44":"2019-11-14T13:06:06.602Z","0.11.6-alpha.45":"2019-11-14T13:09:37.069Z","0.11.6-alpha.46":"2019-11-14T13:11:52.377Z","0.11.6-alpha.47":"2019-11-14T13:13:40.209Z","0.11.6-alpha.48":"2019-11-14T13:17:50.496Z","0.11.6":"2019-11-14T13:32:24.160Z","0.11.7-alpha.0":"2019-11-14T13:58:35.827Z","0.11.7-alpha.1":"2019-11-14T14:04:38.237Z","0.11.7-alpha.2":"2019-11-14T14:23:20.976Z","0.11.7":"2019-11-14T14:25:28.391Z","0.11.8-alpha.1":"2019-11-14T19:03:22.134Z","0.11.8-alpha.2":"2019-11-14T19:06:52.123Z","0.11.8-alpha.3":"2019-11-14T19:31:51.408Z","0.11.8-alpha.4":"2019-11-14T19:37:24.079Z","0.11.8-alpha.5":"2019-11-14T19:39:31.958Z","0.11.8":"2019-11-14T19:51:41.438Z","0.11.9":"2019-11-14T20:20:37.820Z","0.11.10-alpha.0":"2019-11-15T01:35:32.751Z","0.11.10-alpha.1":"2019-11-15T01:41:23.330Z","0.11.10":"2019-11-15T01:43:55.618Z","0.11.11-alpha.1":"2019-11-15T02:16:11.250Z","0.11.11-alpha.5":"2019-11-15T06:37:02.447Z","0.11.11-alpha.6":"2019-11-15T06:40:39.774Z","0.11.11-alpha.7":"2019-11-15T06:52:35.148Z","0.11.11-alpha.8":"2019-11-15T06:55:22.727Z","0.11.11-alpha.9":"2019-11-15T06:56:46.593Z","0.11.11-alpha.10":"2019-11-15T07:01:53.476Z","0.11.11-alpha.11":"2019-11-15T07:05:12.861Z","0.11.11-alpha.12":"2019-11-15T07:06:49.137Z","0.11.11-alpha.13":"2019-11-15T07:14:00.842Z","0.11.11":"2019-11-15T07:17:22.948Z","0.11.12-alpha.0":"2019-11-15T07:22:59.058Z","0.11.12-alpha.1":"2019-11-15T07:27:43.945Z","0.11.12-alpha.2":"2019-11-15T07:42:40.675Z","0.11.12-alpha.3":"2019-11-15T07:50:40.932Z","0.11.12-alpha.4":"2019-11-15T08:03:03.377Z","0.11.12":"2019-11-18T20:24:49.491Z","0.11.13":"2019-11-18T20:28:06.884Z","0.11.14":"2019-11-18T20:36:54.934Z","0.11.15-alpha.0":"2019-11-18T20:45:46.191Z","0.11.15-alpha.1":"2019-11-18T20:51:38.925Z","0.11.15-alpha.2":"2019-11-18T20:54:52.729Z","0.11.15-alpha.3":"2019-11-18T20:58:37.042Z","0.11.15-alpha.4":"2019-11-18T21:02:19.084Z","0.11.15-alpha.5":"2019-11-18T21:05:53.551Z","0.11.15":"2019-11-18T21:07:29.753Z","0.11.16":"2019-11-18T21:15:38.164Z","0.11.17":"2019-11-18T21:41:56.071Z","0.11.18":"2019-11-19T01:20:23.696Z","0.11.19-alpha.0":"2019-11-19T02:26:05.690Z","0.11.19-alpha.1":"2019-11-19T02:28:02.518Z","0.11.19-alpha.2":"2019-11-19T02:30:41.225Z","0.11.19-alpha.3":"2019-11-19T02:32:35.490Z","0.11.19-alpha.4":"2019-11-19T02:34:25.208Z","0.11.19-alpha.5":"2019-11-19T02:37:33.729Z","0.11.19-alpha.6":"2019-11-19T02:40:08.076Z","0.11.19-alpha.7":"2019-11-19T02:43:52.890Z","0.11.19-alpha.8":"2019-11-19T02:45:24.561Z","0.11.19-alpha.9":"2019-11-19T02:47:21.737Z","0.11.19-alpha.10":"2019-11-19T02:49:14.412Z","0.11.19-alpha.11":"2019-11-19T02:53:17.576Z","0.11.19-alpha.12":"2019-11-19T02:56:28.826Z","0.11.19-alpha.13":"2019-11-19T02:59:56.667Z","0.11.19-alpha.14":"2019-11-19T03:01:54.120Z","0.11.19":"2019-11-22T01:18:41.143Z","0.11.20-alpha.2":"2019-11-22T05:27:32.605Z","0.12.0":"2019-11-22T05:54:23.261Z","0.12.1":"2019-11-24T20:59:30.167Z","0.12.2":"2019-11-25T09:01:07.464Z","0.12.3-alpha.0":"2019-11-29T06:00:32.464Z","0.12.3-alpha.1":"2019-11-29T06:22:18.922Z","0.12.3-alpha.3":"2019-11-29T09:41:01.531Z","0.12.3":"2019-11-29T09:42:47.956Z","0.12.4-alpha.1":"2019-11-29T09:51:20.739Z","0.12.4":"2019-11-29T10:01:19.975Z","0.12.5-alpha.1":"2019-12-05T03:35:03.007Z","0.13.0":"2019-12-05T03:42:50.644Z","0.13.1-alpha.1":"2019-12-06T21:43:01.345Z","0.13.1-alpha.2":"2019-12-06T21:46:04.883Z","0.13.1-alpha.3":"2019-12-06T21:54:27.427Z","0.13.1-alpha.4":"2019-12-06T21:57:28.092Z","0.13.1-alpha.5":"2019-12-06T21:59:23.061Z","0.13.1-alpha.6":"2019-12-06T22:01:24.534Z","0.13.1-alpha.7":"2019-12-06T22:03:51.348Z","0.13.1-alpha.8":"2019-12-06T22:45:12.170Z","0.13.1-alpha.9":"2019-12-06T22:49:36.794Z","0.13.1-alpha.10":"2019-12-06T22:56:15.485Z","0.13.1-alpha.11":"2019-12-06T22:59:22.344Z","0.13.1-alpha.12":"2019-12-06T23:05:44.728Z","0.13.1-alpha.13":"2019-12-06T23:10:21.846Z","0.13.1-alpha.14":"2019-12-06T23:15:12.586Z","0.13.1-alpha.15":"2019-12-06T23:19:30.279Z","0.13.1-alpha.16":"2019-12-06T23:23:23.674Z","0.13.1-alpha.17":"2019-12-06T23:26:33.710Z","0.13.1-alpha.18":"2019-12-06T23:32:24.326Z","0.13.1-alpha.19":"2019-12-06T23:36:07.325Z","0.13.1-alpha.20":"2019-12-06T23:37:21.266Z","0.13.1-alpha.21":"2019-12-06T23:40:23.200Z","0.13.1-alpha.22":"2019-12-06T23:55:18.051Z","0.13.1-alpha.23":"2019-12-07T00:00:32.566Z","0.13.1-alpha.24":"2019-12-07T00:05:14.445Z","0.13.1-alpha.25":"2019-12-07T00:10:03.775Z","0.13.1-alpha.27":"2019-12-07T00:19:44.219Z","0.13.1-alpha.28":"2019-12-07T00:25:33.591Z","0.13.1-alpha.29":"2019-12-07T00:29:06.899Z","0.13.1-alpha.30":"2019-12-07T00:33:34.453Z","0.13.1-alpha.31":"2019-12-07T00:38:50.630Z","0.13.1-alpha.32":"2019-12-07T00:43:15.240Z","0.13.1-alpha.33":"2019-12-07T00:45:59.589Z","0.13.1-alpha.34":"2019-12-07T00:50:37.663Z","0.13.1-alpha.35":"2019-12-07T00:51:45.128Z","0.13.1-alpha.36":"2019-12-07T00:55:56.684Z","0.13.1-alpha.37":"2019-12-07T01:03:00.646Z","0.13.1-alpha.38":"2019-12-07T01:04:19.257Z","0.13.1-alpha.39":"2019-12-07T01:09:15.746Z","0.14.0":"2019-12-07T01:33:34.545Z","0.14.1-alpha.4":"2019-12-09T03:32:00.624Z","0.14.1-alpha.5":"2019-12-09T03:39:24.537Z","0.14.1-alpha.6":"2019-12-09T03:43:18.202Z","0.14.1-alpha.7":"2019-12-09T03:49:07.142Z","0.14.1-alpha.8":"2019-12-09T03:55:37.090Z","0.15.0":"2019-12-09T04:07:25.779Z","0.15.1-alpha.2":"2019-12-09T23:06:00.896Z","0.15.1-alpha.3":"2019-12-09T23:17:18.426Z","0.15.1-alpha.4":"2019-12-09T23:21:19.377Z","0.15.1-alpha.5":"2019-12-09T23:24:17.542Z","0.15.1-alpha.6":"2019-12-09T23:27:38.225Z","0.15.1-alpha.7":"2019-12-09T23:33:49.161Z","0.15.1-alpha.8":"2019-12-09T23:36:50.696Z","0.15.1-alpha.9":"2019-12-09T23:40:32.638Z","0.15.1":"2019-12-09T23:48:10.938Z","0.15.2-alpha.4":"2019-12-16T09:04:39.203Z","0.15.2-alpha.5":"2019-12-16T09:36:58.104Z","0.15.2":"2019-12-16T09:43:10.532Z","0.15.3-alpha.0":"2019-12-16T09:49:48.572Z","0.15.3-alpha.1":"2019-12-16T09:54:42.170Z","0.15.3-alpha.2":"2019-12-16T09:57:37.386Z","0.15.3":"2019-12-16T10:01:17.257Z","0.15.4-alpha.0":"2019-12-16T10:07:04.525Z","0.16.0":"2019-12-16T10:09:41.572Z","0.17.0":"2019-12-16T10:16:14.355Z","0.17.1":"2019-12-16T10:24:29.302Z","0.17.2":"2019-12-16T13:15:28.045Z","0.17.3":"2019-12-16T13:23:33.840Z","0.18.0":"2019-12-16T13:41:21.716Z","0.18.1":"2019-12-16T13:53:16.720Z","0.18.2":"2019-12-16T21:45:47.586Z","0.18.3-alpha.2":"2019-12-17T00:33:09.138Z","0.18.3-alpha.3":"2019-12-17T00:35:47.559Z","0.18.3-alpha.4":"2019-12-17T00:40:12.965Z","0.18.3-alpha.6":"2019-12-17T00:50:57.961Z","0.18.3":"2019-12-17T01:05:18.943Z","0.19.0-alpha.5":"2019-12-17T04:59:47.606Z","0.19.0":"2019-12-17T12:27:42.747Z","0.19.1":"2019-12-17T23:55:31.021Z","0.19.2":"2019-12-18T03:23:48.491Z","0.19.4-alpha.7":"2019-12-18T20:25:17.090Z","0.19.4":"2019-12-18T20:37:44.793Z","0.19.5":"2019-12-18T20:44:51.336Z","0.19.6":"2019-12-20T13:52:53.825Z","0.19.8-alpha.9":"2020-01-10T14:31:00.144Z","0.19.8":"2020-01-10T14:33:21.883Z","0.19.9":"2020-01-15T05:32:06.943Z","0.19.10-alpha.2":"2020-03-02T13:19:52.125Z","0.19.10":"2020-03-02T13:23:43.541Z","0.19.11-alpha.13":"2020-03-02T14:01:20.810Z","0.19.11":"2020-03-02T14:03:56.551Z","0.19.12-alpha.1":"2020-03-02T19:32:52.147Z","0.19.12-alpha.3":"2020-03-02T19:44:20.670Z","0.19.12":"2020-03-02T19:47:56.025Z","0.19.13-alpha.0":"2020-03-02T19:59:32.482Z","0.19.13-alpha.1":"2020-03-02T20:02:50.999Z","0.19.13":"2020-03-02T20:05:27.363Z","0.20.0":"2020-03-02T20:40:22.263Z","0.20.1-alpha.1":"2020-03-11T18:33:44.345Z","0.20.1-alpha.2":"2020-03-11T18:36:32.144Z","0.20.1":"2020-03-11T18:38:37.884Z","0.21.1-alpha.1":"2020-03-12T18:32:40.469Z","0.21.1-alpha.2":"2020-03-12T19:07:23.095Z","0.21.1-alpha.3":"2020-03-12T19:15:48.895Z","0.21.1":"2020-03-12T19:22:19.123Z","0.21.2-alpha.3":"2020-03-12T20:06:37.142Z","0.21.2-alpha.4":"2020-03-12T20:12:44.474Z","0.21.2-alpha.6":"2020-03-12T20:49:53.495Z","0.21.2-alpha.7":"2020-03-12T20:54:40.573Z","0.21.2":"2020-03-12T21:02:58.356Z","0.21.3-alpha.0":"2020-03-12T21:18:08.476Z","0.21.3-alpha.1":"2020-03-12T21:19:29.629Z","0.21.3-alpha.2":"2020-03-12T21:23:59.087Z","0.21.3-alpha.3":"2020-03-12T21:27:17.765Z","0.21.3-alpha.4":"2020-03-12T21:33:00.998Z","0.21.3-alpha.5":"2020-03-12T21:36:29.794Z","0.21.3-alpha.6":"2020-03-12T21:38:37.081Z","0.21.3-alpha.7":"2020-03-12T21:41:08.172Z","0.21.3":"2020-03-12T21:43:26.207Z","0.21.4-alpha.3":"2020-03-13T17:31:31.005Z","0.21.4-alpha.4":"2020-03-13T17:33:00.736Z","0.21.4":"2020-03-13T17:36:28.709Z","0.21.5-alpha.0":"2020-03-13T17:46:36.311Z","0.21.5-alpha.1":"2020-03-13T17:54:52.704Z","0.21.5-alpha.2":"2020-03-13T17:58:01.452Z","0.21.5-alpha.3":"2020-03-13T18:01:26.115Z","0.21.5-alpha.4":"2020-03-13T18:03:30.134Z","0.21.5-alpha.5":"2020-03-13T18:07:57.034Z","0.21.5-alpha.6":"2020-03-13T18:16:35.803Z","0.21.5-alpha.7":"2020-03-13T18:24:52.014Z","0.21.5-alpha.8":"2020-03-13T18:28:16.204Z","0.21.5-alpha.9":"2020-03-13T18:33:38.890Z","0.21.5-alpha.10":"2020-03-13T18:35:29.096Z","0.21.5-alpha.11":"2020-03-13T18:39:05.037Z","0.21.5-alpha.12":"2020-03-13T18:42:54.957Z","0.21.5-alpha.13":"2020-03-13T18:45:20.283Z","0.21.5-alpha.14":"2020-03-13T18:47:27.616Z","0.21.5-alpha.15":"2020-03-13T18:50:02.022Z","0.21.5":"2020-03-13T18:53:50.178Z","0.21.7-alpha.0":"2020-03-15T07:33:52.101Z","0.21.7-alpha.1":"2020-03-15T07:36:04.064Z","0.21.7-alpha.2":"2020-03-15T07:47:45.144Z","0.21.7":"2020-03-15T07:59:17.886Z","0.21.8-alpha.0":"2020-03-19T10:05:01.274Z","0.21.8-alpha.1":"2020-03-19T10:08:23.580Z","0.21.8-alpha.2":"2020-03-19T10:12:45.868Z","0.21.8-alpha.3":"2020-03-19T10:28:40.189Z","0.21.8-alpha.4":"2020-03-19T10:35:49.558Z","0.21.8-alpha.5":"2020-03-19T10:38:42.348Z","0.21.8":"2020-03-19T13:26:08.775Z","0.21.9-alpha.0":"2020-03-19T18:48:29.765Z","0.21.9-alpha.1":"2020-03-19T18:51:01.901Z","0.21.9-alpha.2":"2020-03-19T19:39:36.161Z","0.21.9":"2020-03-19T19:44:15.619Z","0.21.10-alpha.0":"2020-03-20T05:07:02.227Z","0.21.10-alpha.1":"2020-03-20T05:12:59.184Z","0.21.10-alpha.2":"2020-03-20T05:19:34.867Z","0.21.10-alpha.3":"2020-03-20T06:13:34.460Z","0.21.10-alpha.4":"2020-03-20T06:22:23.410Z","0.21.10-alpha.5":"2020-03-20T06:38:33.742Z","0.21.10-alpha.6":"2020-03-20T06:57:54.747Z","0.21.10-alpha.7":"2020-03-20T07:01:02.277Z","0.21.10-alpha.8":"2020-03-20T07:29:32.976Z","0.21.10-alpha.9":"2020-03-20T07:33:20.648Z","0.21.10-alpha.10":"2020-03-20T07:37:50.120Z","0.21.10-alpha.11":"2020-03-20T07:47:00.012Z","0.21.10":"2020-03-20T07:50:02.595Z","0.21.11-alpha.0":"2020-03-20T10:18:55.517Z","0.21.11":"2020-03-21T06:49:08.926Z","0.21.12-alpha.0":"2020-03-21T06:55:47.320Z","0.21.12-alpha.1":"2020-03-21T07:01:32.041Z","0.21.12-alpha.2":"2020-03-21T07:03:53.502Z","0.21.12-alpha.3":"2020-03-21T07:06:48.972Z","0.21.12":"2020-03-21T07:10:17.429Z","0.21.13":"2020-03-22T18:48:17.037Z","0.21.14-alpha.5":"2020-03-26T09:35:53.856Z","0.21.14":"2020-03-26T09:39:50.915Z","0.21.15-alpha.1":"2020-03-26T19:58:51.165Z","0.21.15-alpha.2":"2020-03-26T20:00:58.488Z","0.21.15-alpha.3":"2020-03-26T20:02:46.768Z","0.21.15-alpha.4":"2020-03-26T20:08:02.590Z","0.21.15-alpha.5":"2020-03-26T20:14:12.043Z","0.21.15-alpha.6":"2020-03-26T20:21:24.535Z","0.21.15-alpha.7":"2020-03-26T20:29:18.032Z","0.21.15-alpha.8":"2020-03-26T20:33:17.544Z","0.21.15-alpha.9":"2020-03-26T20:40:40.037Z","0.21.15-alpha.10":"2020-03-26T20:41:46.322Z","0.21.15-alpha.11":"2020-03-26T21:05:11.802Z","0.21.15-alpha.12":"2020-03-26T21:14:03.549Z","0.21.15":"2020-03-26T21:18:13.489Z","0.21.16":"2020-03-27T04:09:19.112Z","0.21.17-alpha.2":"2020-03-27T13:02:09.704Z","0.21.17":"2020-03-27T13:05:24.228Z","0.21.18":"2020-03-28T21:14:59.179Z","0.21.19-alpha.0":"2020-03-29T03:09:51.522Z","0.21.19-alpha.1":"2020-03-29T03:23:37.197Z","0.21.19-alpha.2":"2020-03-29T03:40:49.720Z","0.21.19-alpha.3":"2020-03-29T03:43:20.183Z","0.21.19-alpha.4":"2020-03-29T03:46:23.562Z","0.21.19-alpha.5":"2020-03-29T03:50:53.661Z","0.21.19-alpha.6":"2020-03-29T03:55:57.780Z","0.21.19-alpha.7":"2020-03-29T04:02:30.561Z","0.21.19":"2020-03-29T04:30:45.727Z","0.22.0":"2020-03-29T11:23:22.072Z","0.22.1":"2020-06-10T06:17:39.178Z","0.23.0":"2020-06-10T06:47:51.482Z","0.23.1":"2020-06-19T20:37:15.885Z","0.23.2":"2020-06-19T20:54:56.111Z","0.23.3-alpha.2":"2020-06-19T21:01:31.975Z","0.23.3-alpha.3":"2020-06-19T21:09:45.879Z","0.23.3":"2020-06-19T21:25:18.682Z","0.24.0":"2020-06-19T21:32:22.624Z","0.25.0-canary.0":"2022-09-01T13:51:42.294Z","0.25.0-canary.1":"2022-09-01T13:55:41.840Z","0.25.0-canary.2":"2022-09-01T14:00:24.833Z"},"maintainers":[{"name":"saltyshiomix","email":"shiono.yoshihide@gmail.com"}],"description":"React SSR as a view template engine","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/core/README.md","keywords":["react","express","nest","nestjs","server-side-rendering","ssr","view-engine","view-template-engine"],"repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"license":"MIT","readme":"","readmeFilename":""}