diff --git a/packages/electrode-react-webapp/lib/react/token-handlers.js b/packages/electrode-react-webapp/lib/react/token-handlers.js index f04b3eaae..8f7f25231 100644 --- a/packages/electrode-react-webapp/lib/react/token-handlers.js +++ b/packages/electrode-react-webapp/lib/react/token-handlers.js @@ -144,7 +144,7 @@ module.exports = function setup(handlerContext /*, asyncTemplate*/) { const tokenHandlers = { [CONTENT_MARKER]: context => { - return context.user.content && context.user.content.html || ""; + return (context.user.content && context.user.content.html) || ""; }, [TITLE_MARKER]: () => { diff --git a/packages/electrode-react-webapp/test/jsx-templates/test1.jsx b/packages/electrode-react-webapp/test/jsx-templates/test1.jsx index 59037bcdf..57db9e93f 100644 --- a/packages/electrode-react-webapp/test/jsx-templates/test1.jsx +++ b/packages/electrode-react-webapp/test/jsx-templates/test1.jsx @@ -126,7 +126,7 @@ const Template = () => ( name="MainBody" timestamp elementId="subapp-mainbody" - streaming + useStream async hydrateServerData serverSideRendering diff --git a/packages/electrode-react-webapp/test/spec/jsx/test1-output.txt b/packages/electrode-react-webapp/test/spec/jsx/test1-output.txt index dcaf8cfb4..4e211ef73 100644 --- a/packages/electrode-react-webapp/test/spec/jsx/test1-output.txt +++ b/packages/electrode-react-webapp/test/spec/jsx/test1-output.txt @@ -73,7 +73,7 @@ hello token process module subapp-web/lib/load not found -
+
token process module subapp-web/lib/load not found diff --git a/packages/subapp-pbundle/lib/framework-lib.js b/packages/subapp-pbundle/lib/framework-lib.js index c690c1500..7fe290579 100644 --- a/packages/subapp-pbundle/lib/framework-lib.js +++ b/packages/subapp-pbundle/lib/framework-lib.js @@ -66,7 +66,7 @@ class FrameworkLib { } renderTo(element, options) { - assert(!options.streaming, "render to stream is not yet supported for preact"); + assert(!options.useStream, "render to stream is not yet supported for preact"); assert(!options.suspenseSsr, "suspense is not yet supported for preact"); diff --git a/packages/subapp-react/lib/framework-lib.js b/packages/subapp-react/lib/framework-lib.js index f8938512e..adc7ffb5a 100644 --- a/packages/subapp-react/lib/framework-lib.js +++ b/packages/subapp-react/lib/framework-lib.js @@ -59,8 +59,8 @@ class FrameworkLib { } renderTo(element, options) { - if (options.streaming) { - assert(!options.suspenseSsr, "streaming and suspense SSR together are not supported"); + if (options.useStream) { + assert(!options.suspenseSsr, "useStream and suspense SSR together are not supported"); if (options.hydrateServerData) { return ReactDOMServer.renderToNodeStream(element); } else { @@ -193,7 +193,7 @@ class FrameworkLib { `subapp ${this.ref.subApp.name} specified useReactRouter without a StartComponent, \ and can't generate it because module react-router-dom with StaticRouter is not found` ); - return props2 => + return (props2) => React.createElement( ReactRouterDom.StaticRouter, props2, diff --git a/packages/subapp-react/package.json b/packages/subapp-react/package.json index cd66e9124..df550ad4d 100644 --- a/packages/subapp-react/package.json +++ b/packages/subapp-react/package.json @@ -88,5 +88,10 @@ "functions": 100, "lines": 100, "cache": true + }, + "prettier": { + "printWidth": 100, + "trailingComma": "none", + "arrowParens": "avoid" } } diff --git a/packages/subapp-react/test/spec/ssr-framework.spec.js b/packages/subapp-react/test/spec/ssr-framework.spec.js index ac04a3155..38f4061a8 100644 --- a/packages/subapp-react/test/spec/ssr-framework.spec.js +++ b/packages/subapp-react/test/spec/ssr-framework.spec.js @@ -9,7 +9,7 @@ const { asyncVerify } = require("run-verify"); const Redux = require("redux"); const { connect } = require("react-redux"); -describe("SSR React framework", function() { +describe("SSR React framework", function () { it("should setup React framework", () => { expect(lib.React).to.be.ok; expect(lib.AppContext).to.be.ok; @@ -92,7 +92,7 @@ describe("SSR React framework", function() { expect(res).contains("Hello foo bar"); }); - it("should render Component with streaming if enabled", () => { + it("should render Component with stream if enabled", () => { const framework = new lib.FrameworkLib({ subApp: { prepare: () => ({ test: "foo bar" }), @@ -101,7 +101,7 @@ describe("SSR React framework", function() { } }, subAppServer: {}, - options: { serverSideRendering: true, streaming: true }, + options: { serverSideRendering: true, useStream: true }, context: { user: {} } @@ -118,7 +118,7 @@ describe("SSR React framework", function() { ); }); - it("should hydrate render Component with streaming if enabled", () => { + it("should hydrate render Component with stream if enabled", () => { const framework = new lib.FrameworkLib({ subApp: { prepare: () => ({ test: "foo bar" }), @@ -127,7 +127,7 @@ describe("SSR React framework", function() { } }, subAppServer: {}, - options: { serverSideRendering: true, streaming: true, hydrateServerData: true }, + options: { serverSideRendering: true, useStream: true, hydrateServerData: true }, context: { user: {} } diff --git a/packages/subapp-server/lib/setup-hapi-routes.js b/packages/subapp-server/lib/setup-hapi-routes.js index d6b17965c..ea7d84e4b 100644 --- a/packages/subapp-server/lib/setup-hapi-routes.js +++ b/packages/subapp-server/lib/setup-hapi-routes.js @@ -172,11 +172,13 @@ async function setupRoutesFromFile(srcDir, server, pluginOpts) { }); } + const useStream = routeOptions.useStream !== false; + const routeHandler = ReactWebapp.makeRouteHandler(routeOptions); const handler = async (request, h) => { try { const context = await routeHandler({ - content: { html: "", status: 200, useStream: true }, + content: { html: "", status: 200, useStream }, mode: "", request }); @@ -185,10 +187,7 @@ async function setupRoutesFromFile(srcDir, server, pluginOpts) { const status = data.status; if (status === undefined) { - return h - .response(data) - .type("text/html; charset=UTF-8") - .code(200); + return h.response(data).type("text/html; charset=UTF-8").code(200); } else if (HttpStatus.redirect[status]) { return h.redirect(data.path).code(status); } else if (HttpStatus.displayHtml[status]) { diff --git a/packages/subapp-server/src/index-page.jsx b/packages/subapp-server/src/index-page.jsx index c77be663d..54e934c9d 100644 --- a/packages/subapp-server/src/index-page.jsx +++ b/packages/subapp-server/src/index-page.jsx @@ -23,7 +23,7 @@ const RenderSubApps = (props, context) => { _concurrent: true, elementId, timestamp: true, - streaming: false, + useStream: false, async: true, serverSideRendering: true }, diff --git a/packages/subapp-web/lib/load.js b/packages/subapp-web/lib/load.js index 73189fb49..403ad693d 100644 --- a/packages/subapp-web/lib/load.js +++ b/packages/subapp-web/lib/load.js @@ -12,6 +12,7 @@ * - generate code to bootstrap subapp on client */ +const assert = require("assert"); const Fs = require("fs"); const Path = require("path"); const _ = require("lodash"); @@ -53,7 +54,7 @@ module.exports = function setup(setupContext, { props: setupProps }) { // name="Header" // async=true // defer=true - // streaming=true + // useStream=true // serverSideRendering=true // hydrateServerData=false // clientSideRendering=false @@ -189,10 +190,24 @@ Response: ${err || body}` loadSubApp(); prepareSubAppJsBundle(); + const verifyUseStream = props => { + if (props.useStream) { + const routeStream = setupContext.routeOptions.useStream; + assert( + routeStream !== false, + `subapp '${props.name}' can't set useStream when route options 'useStream' is false.` + ); + } + }; + + verifyUseStream(setupProps); + const clientProps = JSON.stringify(_.pick(setupProps, ["useReactRouter"])); return { process: (context, { props }) => { + verifyUseStream(props); + const { request } = context.user; if (request.app.webpackDev && subAppLoadTime < request.app.webpackDev.compileTime) { diff --git a/samples/poc-subapp/README.md b/samples/poc-subapp/README.md index 0a2099826..b10140b38 100644 --- a/samples/poc-subapp/README.md +++ b/samples/poc-subapp/README.md @@ -136,8 +136,8 @@ You can also control how your subapp works from server side to client side for e Some of the attributes supported: - `hydrate` - Enable client side hydration of initial state from server. ie: Use `React.hydrate` API. -- `streaming` - Use the streaming SSR APIs. ie: `ReactDomServer.renderToNodeStream`. -- `suspenseSsr` - Support suspense in SSR. No streaming. +- `useStream` - Use the stream SSR APIs. ie: `ReactDomServer.renderToNodeStream`. +- `suspenseSsr` - Support suspense in SSR. No stream support. ## React Router and SPA @@ -195,10 +195,7 @@ const mapStateToProps = state => state; export default reduxLoadSubApp({ name: "Home", - Component: connect( - mapStateToProps, - dispatch => ({ dispatch }) - )(Home), + Component: connect(mapStateToProps, dispatch => ({ dispatch }))(Home), reduxCreateStore(initialState) { return createStore(reducers, initialState); } diff --git a/samples/poc-subapp/TODO.md b/samples/poc-subapp/TODO.md index ce6f7a05e..1bd852e4f 100644 --- a/samples/poc-subapp/TODO.md +++ b/samples/poc-subapp/TODO.md @@ -1,4 +1,4 @@ -# Streaming SSR [ ] +# Streaming SSR [x] - Enable support for `renderToNodeStream` - Enable HTTP streaming @@ -11,7 +11,7 @@ - Store bundle load status in `window.webSubApps` - When rendering subapp without bundle yet, dynamically load them -# Dynamic SSR [ ] +# Dynamic SSR [x] - Allow each route and subapp to dynamically turn on/off SSR for a request diff --git a/samples/poc-subapp/babel.config.js b/samples/poc-subapp/babel.config.js new file mode 100644 index 000000000..fb1d6601e --- /dev/null +++ b/samples/poc-subapp/babel.config.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = { + extends: "@xarc/app-dev/config/babel/babelrc.js" +}; diff --git a/samples/poc-subapp/fyn-lock.yaml b/samples/poc-subapp/fyn-lock.yaml index ba446284c..3be05a513 100644 --- a/samples/poc-subapp/fyn-lock.yaml +++ b/samples/poc-subapp/fyn-lock.yaml @@ -2088,10 +2088,10 @@ '@webassemblyjs/wast-parser': 1.8.5 '@xtuc/long': 4.2.2 '@xarc/app': - _latest: 8.0.9-fynlocal_h + _latest: 8.0.15-fynlocal_h _: - ../../packages/xarc-app: 8.0.9-fynlocal_h - 8.0.9-fynlocal_h: + ../../packages/xarc-app: 8.0.15-fynlocal_h + 8.0.15-fynlocal_h: top: 1 $: local _: ../../packages/xarc-app @@ -2103,10 +2103,10 @@ optional-require: ^1.0.0 subapp-util: ^1.0.4 '@xarc/app-dev': - _latest: 8.0.9-fynlocal_h + _latest: 8.0.15-fynlocal_h _: - ../../packages/xarc-app-dev: 8.0.9-fynlocal_h - 8.0.9-fynlocal_h: + ../../packages/xarc-app-dev: 8.0.15-fynlocal_h + 8.0.15-fynlocal_h: top: 1 $: local _: ../../packages/xarc-app-dev @@ -2125,15 +2125,15 @@ '@babel/register': ^7.0.0 '@jchip/redbird': ^1.1.0 '@loadable/babel-plugin': ^5.10.0 - '@xarc/webpack': 8.0.0 + '@xarc/webpack': 8.0.2 ansi-to-html: ^0.6.8 babel-plugin-dynamic-import-node: ^2.2.0 babel-plugin-lodash: ^3.3.4 babel-plugin-minify-dead-code-elimination: ^0.5.0 babel-plugin-transform-node-env-inline: ^0.4.3 babel-plugin-transform-react-remove-prop-types: ^0.4.20 - boxen: ^2.1.0 - chalker: ^1.1.1 + boxen: ^4.2.0 + chalker: ^1.2.0 chokidar: ^2.0.4 core-js: ^3 electrode-hapi-compat: ^1.2.0 @@ -2144,6 +2144,7 @@ identity-obj-proxy: ^3.0.0 isomorphic-loader: ^3.0.0 lodash: ^4.13.1 + log-update: ^4.0.0 mime: ^1.0.0 mkdirp: ^0.5.1 nix-clap: ^1.3.7 @@ -2161,25 +2162,25 @@ webpack-dev-middleware: ^3.4.0 webpack-hot-middleware: ^2.22.2 winston: ^2.3.1 - xaa: ^1.2.2 - xclap: ^0.2.46 + xaa: ^1.4.0 + xclap: ^0.2.48 xenv-config: ^1.3.1 xsh: ^0.4.4 peerDependencies: '@xarc/app': ^8.0.3 '@xarc/webpack': - _latest: 8.0.0-fynlocal_h + _latest: 8.0.2-fynlocal_h _: - ../xarc-webpack: 8.0.0-fynlocal_h - 8.0.0-fynlocal_h: + ../xarc-webpack: 8.0.2-fynlocal_h + 8.0.2-fynlocal_h: $: local _: ../../packages/xarc-webpack dependencies: '@loadable/webpack-plugin': ^5.7.1 autoprefixer: ^9.6.0 babel-loader: ^8.0.4 - chalk: ^3.0.0 - chalker: ^1.1.2 + chalk: ^4.0.0 + chalker: ^1.2.0 css-loader: ^1.0.0 electrode-cdn-file-loader: ^1.0.0 electrode-node-resolver: ^2.0.0 @@ -2341,9 +2342,15 @@ ansi-colors: $: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== _: 'https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz' ansi-escapes: - _latest: 4.3.0 + _latest: 4.3.1 _: ^3.0.0: 3.2.0 + ^4.3.0: 4.3.1 + 4.3.1: + $: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + _: 'https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz' + dependencies: + type-fest: ^0.11.0 3.2.0: $: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== _: 'https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz' @@ -2360,6 +2367,10 @@ ansi-regex: ^2.0.0: 2.1.1 ^3.0.0: 3.0.0 '^4.0.0,^4.1.0': 4.1.0 + ^5.0.0: 5.0.0 + 5.0.0: + $: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + _: 'https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz' 4.1.0: $: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== _: 'https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz' @@ -2374,7 +2385,7 @@ ansi-styles: _: ^2.2.1: 2.2.1 '^3.2.0,^3.2.1': 3.2.1 - ^4.1.0: 4.2.1 + '^4.0.0,^4.1.0': 4.2.1 4.2.1: $: sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== _: 'https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz' @@ -2541,6 +2552,10 @@ astral-regex: _latest: 2.0.0 _: ^1.0.0: 1.0.0 + ^2.0.0: 2.0.0 + 2.0.0: + $: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + _: 'https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz' 1.0.0: $: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== _: 'https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz' @@ -2884,18 +2899,19 @@ boolbase: boxen: _latest: 4.2.0 _: - ^2.1.0: 2.1.0 - 2.1.0: - $: sha512-luq3RQOt2U5sUX+fiu+qnT+wWnHDcATLpEe63jvge6GUZO99AKbVRfp97d2jgLvq1iQa0ORzaAm4lGVG52ZSlw== - _: 'https://registry.npmjs.org/boxen/-/boxen-2.1.0.tgz' + ^4.2.0: 4.2.0 + 4.2.0: + $: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + _: 'https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz' dependencies: ansi-align: ^3.0.0 - camelcase: ^5.0.0 - chalk: ^2.4.1 - cli-boxes: ^1.0.0 - string-width: ^3.0.0 - term-size: ^1.2.0 - widest-line: ^2.0.0 + camelcase: ^5.3.1 + chalk: ^3.0.0 + cli-boxes: ^2.2.0 + string-width: ^4.1.0 + term-size: ^2.1.0 + type-fest: ^0.8.1 + widest-line: ^3.1.0 brace-expansion: _latest: 1.1.11 _: @@ -3219,6 +3235,13 @@ chalk: '2.4.2,^2.0.0,^2.0.1,^2.1.0,^2.4.1,^2.4.2': 2.4.2 ^1.1.3: 1.1.3 ^3.0.0: 3.0.0 + ^4.0.0: 4.0.0 + 4.0.0: + $: sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + _: 'https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz' + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 3.0.0: $: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== _: 'https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz' @@ -3242,14 +3265,14 @@ chalk: strip-ansi: ^3.0.0 supports-color: ^2.0.0 chalker: - _latest: 1.1.2 + _latest: 1.2.0 _: - '^1.1.1,^1.1.2': 1.1.2 - 1.1.2: - $: sha512-DYaS9gfTsjQz8aYBKVlqicaXgNHfp6/HqOmNXdq40C/QgXl16kJSp2USdF8l2bJGDEE9hJKQqSGQVB5UczxnTA== - _: 'https://registry.npmjs.org/chalker/-/chalker-1.1.2.tgz' + ^1.2.0: 1.2.0 + 1.2.0: + $: sha512-Cag6asQV/lK6AQGBWGGDt5bu+FSzo4OlLHQVrd4Io1cJCGNXIvKcaxx6JH0+iL1azQ4Bs1i7qkvzlkH2Vwo2OQ== + _: 'https://registry.npmjs.org/chalker/-/chalker-1.2.0.tgz' dependencies: - chalk: ^2.4.2 + chalk: ^4.0.0 chardet: _latest: 0.8.0 _: @@ -3334,14 +3357,20 @@ class-utils: cli-boxes: _latest: 2.2.0 _: - ^1.0.0: 1.0.0 - 1.0.0: - $: sha1-T6kXw+WclKAEzWH47lCdplFocUM= - _: 'https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz' + ^2.2.0: 2.2.0 + 2.2.0: + $: sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + _: 'https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz' cli-cursor: _latest: 3.1.0 _: ^2.1.0: 2.1.0 + ^3.1.0: 3.1.0 + 3.1.0: + $: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + _: 'https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz' + dependencies: + restore-cursor: ^3.1.0 2.1.0: $: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= _: 'https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz' @@ -3635,7 +3664,7 @@ cross-spawn: _: '6.0.5,^6.0.0': 6.0.5 ^4: 4.0.2 - '^5.0.1,^5.1.0': 5.1.0 + ^5.1.0: 5.1.0 6.0.5: $: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== _: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz' @@ -4287,10 +4316,10 @@ electrode-node-resolver: dependencies: require-at: ^1.0.0 electrode-react-webapp: - _latest: 3.8.6-fynlocal_h + _latest: 3.8.8-fynlocal_h _: - ../electrode-react-webapp: 3.8.6-fynlocal_h - 3.8.6-fynlocal_h: + ../electrode-react-webapp: 3.8.8-fynlocal_h + 3.8.8-fynlocal_h: $: local _: ../../packages/electrode-react-webapp dependencies: @@ -4357,6 +4386,10 @@ emoji-regex: _latest: 8.0.0 _: ^7.0.1: 7.0.3 + ^8.0.0: 8.0.0 + 8.0.0: + $: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + _: 'https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz' 7.0.3: $: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== _: 'https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz' @@ -4705,7 +4738,6 @@ exec-sh: execa: _latest: 4.0.0 _: - ^0.7.0: 0.7.0 ^1.0.0: 1.0.0 1.0.0: $: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== @@ -4718,17 +4750,6 @@ execa: p-finally: ^1.0.0 signal-exit: ^3.0.0 strip-eof: ^1.0.0 - 0.7.0: - $: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - _: 'https://registry.npmjs.org/execa/-/execa-0.7.0.tgz' - dependencies: - cross-spawn: ^5.0.1 - get-stream: ^3.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 exit: _latest: 0.1.2 _: @@ -5184,16 +5205,12 @@ get-caller-file: get-stream: _latest: 5.1.0 _: - ^3.0.0: 3.0.0 ^4.0.0: 4.1.0 4.1.0: $: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== _: 'https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz' dependencies: pump: ^3.0.0 - 3.0.0: - $: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - _: 'https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz' get-value: _latest: 3.0.1 _: @@ -5980,6 +5997,10 @@ is-fullwidth-code-point: _latest: 3.0.0 _: ^2.0.0: 2.0.0 + ^3.0.0: 3.0.0 + 3.0.0: + $: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + _: 'https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz' 2.0.0: $: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= _: 'https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz' @@ -7137,6 +7158,18 @@ lodash.upperfirst: 4.3.1: $: sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= _: 'https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz' +log-update: + _latest: 4.0.0 + _: + ^4.0.0: 4.0.0 + 4.0.0: + $: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + _: 'https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz' + dependencies: + ansi-escapes: ^4.3.0 + cli-cursor: ^3.1.0 + slice-ansi: ^4.0.0 + wrap-ansi: ^6.2.0 loose-envify: _latest: 1.4.0 _: @@ -7337,7 +7370,7 @@ mimic-fn: _latest: 3.0.0 _: ^1.0.0: 1.2.0 - ^2.0.0: 2.1.0 + '^2.0.0,^2.1.0': 2.1.0 2.1.0: $: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== _: 'https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz' @@ -7551,7 +7584,7 @@ nice-try: nix-clap: _latest: 1.3.10 _: - '^1.0.8,^1.3.7': 1.3.10 + '^1.3.10,^1.3.7': 1.3.10 1.3.10: $: sha512-sdQTROrsLYFFRo4koLdVPfXC+H7kB+cEjSvSLNP/9m2foSypqoLzqfITdUHNZQi8IuvAMLdB+leaDtBj2EJPlA== _: 'https://registry.npmjs.org/nix-clap/-/nix-clap-1.3.10.tgz' @@ -7919,6 +7952,12 @@ onetime: _latest: 5.1.0 _: ^2.0.0: 2.0.1 + ^5.1.0: 5.1.0 + 5.1.0: + $: sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + _: 'https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz' + dependencies: + mimic-fn: ^2.1.0 2.0.1: $: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= _: 'https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz' @@ -9432,6 +9471,13 @@ restore-cursor: _latest: 3.1.0 _: ^2.0.0: 2.0.0 + ^3.1.0: 3.1.0 + 3.1.0: + $: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + _: 'https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz' + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 2.0.0: $: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= _: 'https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz' @@ -9808,9 +9854,17 @@ slash: $: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== _: 'https://registry.npmjs.org/slash/-/slash-2.0.0.tgz' slice-ansi: - _latest: 3.0.0 + _latest: 4.0.0 _: 1.0.0: 1.0.0 + ^4.0.0: 4.0.0 + 4.0.0: + $: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + _: 'https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz' + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 1.0.0: $: sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== _: 'https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz' @@ -10149,6 +10203,14 @@ string-width: _: '^2.1.0,^2.1.1': 2.1.1 '^3.0.0,^3.1.0': 3.1.0 + '^4.0.0,^4.1.0': 4.2.0 + 4.2.0: + $: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + _: 'https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz' + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.0 3.1.0: $: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== _: 'https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz' @@ -10217,6 +10279,12 @@ strip-ansi: ^3.0.0: 3.0.1 ^4.0.0: 4.0.0 '^5.0.0,^5.1.0,^5.2.0': 5.2.0 + ^6.0.0: 6.0.0 + 6.0.0: + $: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + _: 'https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz' + dependencies: + ansi-regex: ^5.0.0 5.2.0: $: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== _: 'https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz' @@ -10275,10 +10343,10 @@ stylehacks: postcss: ^7.0.0 postcss-selector-parser: ^3.0.0 subapp-react: - _latest: 0.0.11-fynlocal_h + _latest: 0.0.14-fynlocal_h _: - ../../packages/subapp-react: 0.0.11-fynlocal_h - 0.0.11-fynlocal_h: + ../../packages/subapp-react: 0.0.14-fynlocal_h + 0.0.14-fynlocal_h: top: 1 $: local _: ../../packages/subapp-react @@ -10286,43 +10354,43 @@ subapp-react: '@babel/runtime': ^7.8.3 optional-require: ^1.0.0 subapp-util: ^1.0.3 - subapp-web: ^1.0.19 + subapp-web: ^1.0.23 peerDependencies: react: '*' react-dom: '*' subapp-redux: - _latest: 1.0.20-fynlocal_h + _latest: 1.0.23-fynlocal_h _: - ../../packages/subapp-redux: 1.0.20-fynlocal_h - 1.0.20-fynlocal_h: + ../../packages/subapp-redux: 1.0.23-fynlocal_h + 1.0.23-fynlocal_h: top: 1 $: local _: ../../packages/subapp-redux dependencies: optional-require: ^1.0.0 subapp-util: ^1.0.3 - subapp-web: ^1.0.19 + subapp-web: ^1.0.23 peerDependencies: react: '*' react-dom: '*' redux: '*' react-redux: '*' subapp-server: - _latest: 1.1.10-fynlocal_h + _latest: 1.1.16-fynlocal_h _: - ../../packages/subapp-server: 1.1.10-fynlocal_h - 1.1.10-fynlocal_h: + ../../packages/subapp-server: 1.1.16-fynlocal_h + 1.1.16-fynlocal_h: top: 1 $: local _: ../../packages/subapp-server dependencies: '@hapi/boom': ^7.4.1 - electrode-react-webapp: ^3.8.6 + electrode-react-webapp: ^3.8.8 filter-scan-dir: ^1.0.9 http-status-codes: ^1.3.0 optional-require: ^1.0.0 subapp-util: ^1.0.4 - xaa: ^1.0.0 + xaa: ^1.4.0 subapp-util: _latest: 1.0.4-fynlocal_h _: @@ -10334,10 +10402,10 @@ subapp-util: filter-scan-dir: ^1.0.9 optional-require: ^1.0.0 subapp-web: - _latest: 1.0.20-fynlocal_h + _latest: 1.0.23-fynlocal_h _: - '../../packages/subapp-web,../subapp-web': 1.0.20-fynlocal_h - 1.0.20-fynlocal_h: + '../../packages/subapp-web,../subapp-web': 1.0.23-fynlocal_h + 1.0.23-fynlocal_h: top: 1 $: local _: ../../packages/subapp-web @@ -10350,7 +10418,7 @@ subapp-web: optional-require: ^1.0.0 request: ^2.88.0 subapp-util: ^1.0.4 - xaa: ^1.1.4 + xaa: ^1.4.0 sudo-prompt: _latest: 9.1.1 _: @@ -10442,12 +10510,10 @@ tapable: term-size: _latest: 2.2.0 _: - ^1.2.0: 1.2.0 - 1.2.0: - $: sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - _: 'https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz' - dependencies: - execa: ^0.7.0 + ^2.1.0: 2.2.0 + 2.2.0: + $: sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + _: 'https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz' terser: _latest: 4.6.3 _: @@ -10670,6 +10736,17 @@ type-check: _: 'https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz' dependencies: prelude-ls: ~1.1.2 +type-fest: + _latest: 0.13.1 + _: + ^0.11.0: 0.11.0 + ^0.8.1: 0.8.1 + 0.11.0: + $: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + _: 'https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz' + 0.8.1: + $: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + _: 'https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz' typedarray: _latest: 0.0.6 _: @@ -10772,7 +10849,7 @@ unset-value: unwrap-npm-cmd: _latest: 1.1.1 _: - ^1.1.0: 1.1.1 + ^1.1.1: 1.1.1 1.1.1: $: sha512-Y0PFhW+X6oahjV/e4yBxThgq0k9Ymh3RwUh6P/rMiGp55X5qa2mQghZAHKyJ9tDPinZntD0Z+5DHFzlx9/UNbg== _: 'https://registry.npmjs.org/unwrap-npm-cmd/-/unwrap-npm-cmd-1.1.1.tgz' @@ -11163,12 +11240,12 @@ which-module: widest-line: _latest: 3.1.0 _: - ^2.0.0: 2.0.1 - 2.0.1: - $: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - _: 'https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz' + ^3.1.0: 3.1.0 + 3.1.0: + $: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + _: 'https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz' dependencies: - string-width: ^2.1.1 + string-width: ^4.0.0 winston: _latest: 3.2.1 _: @@ -11203,6 +11280,14 @@ wrap-ansi: _latest: 6.2.0 _: ^5.1.0: 5.1.0 + ^6.2.0: 6.2.0 + 6.2.0: + $: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + _: 'https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz' + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 5.1.0: $: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== _: 'https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz' @@ -11257,33 +11342,33 @@ ws: xaa: _latest: 1.2.1 _: - '^1.0.0,^1.1.4': 1.2.1 - ^1.2.2: 1.2.2 - 1.2.2: - $: sha512-1kkYxIZRFj8CruXv/lEFfjQvNnI9lL50AqE2ho7jqdre/ClmrPc10Gc9JgCtwUFM63CxViPn99+4IqHad6Zfrw== - _: 'https://registry.npmjs.org/xaa/-/xaa-1.2.2.tgz' + ^1.1.4: 1.2.1 + ^1.4.0: 1.4.0 + 1.4.0: + $: sha512-mX3ELNk7ZU5KtUwO7XsamqlVoE7xJ/0WRLHRpb6u//sgWfm6AHxsnrnu/pUyp3ppQ4lwV5bsA06j4K7U+WYEhA== + _: 'https://registry.npmjs.org/xaa/-/xaa-1.4.0.tgz' 1.2.1: $: sha512-PUHTFveQ6XOheZq4GlimMcVFrgn9m6rrbFefN8UKeUoJqqeam76VCFMx8hFip1/aXPAnolJCiTAH+KcUQ92G2w== _: 'https://registry.npmjs.org/xaa/-/xaa-1.2.1.tgz' xclap: - _latest: 0.2.46 + _latest: 0.2.48 _: - ^0.2.46: 0.2.46 - 0.2.46: - $: sha512-gootgqb/zpagBldylcMkxACZA+9DAZV0hKkNnailNOcpQ25G+xl+VPYfCZyMW3pLM1B/gffb98jXPUFT1I3rZg== - _: 'https://registry.npmjs.org/xclap/-/xclap-0.2.46.tgz' + ^0.2.48: 0.2.48 + 0.2.48: + $: sha512-jc9/NjcaTDUszhNj0wOW83NNBx7wUcrzYzldotao6go7g/qMH+5QZYNiYyh98Y/8DhFQndDJihL39+oJIPNJFg== + _: 'https://registry.npmjs.org/xclap/-/xclap-0.2.48.tgz' dependencies: - chalk: ^2.0.1 - chalker: ^1.1.2 + chalk: ^4.0.0 + chalker: ^1.2.0 insync: ^2.1.1 jaro-winkler: ^0.2.8 lodash.foreach: ^4.5.0 - nix-clap: ^1.0.8 + nix-clap: ^1.3.10 optional-require: ^1.0.0 path-is-inside: ^1.0.2 string-array: ^1.0.0 - unwrap-npm-cmd: ^1.1.0 - xsh: ^0.4.0 + unwrap-npm-cmd: ^1.1.1 + xsh: ^0.4.4 xenv-config: _latest: 1.3.1 _: @@ -11301,7 +11386,7 @@ xml-name-validator: xsh: _latest: 0.4.4 _: - '^0.4.0,^0.4.4': 0.4.4 + ^0.4.4: 0.4.4 0.4.4: $: sha512-fwl0KsCubpCv/PMwwy6PiaLAak12aROkIgZMec8pzlgB8TvA7jckou7CBDta7SQouiG9KNqWNVOYBKnkEdx4gQ== _: 'https://registry.npmjs.org/xsh/-/xsh-0.4.4.tgz' diff --git a/samples/poc-subapp/package.json b/samples/poc-subapp/package.json index b864fff7c..0ae17585b 100644 --- a/samples/poc-subapp/package.json +++ b/samples/poc-subapp/package.json @@ -69,5 +69,9 @@ "electrode-archetype-opt-jest": "../../packages/electrode-archetype-opt-jest" } }, - "optionalDependencies": {} + "prettier": { + "printWidth": 100, + "trailingComma": "none", + "arrowParens": "avoid" + } } diff --git a/samples/poc-subapp/src/.babelrc.js b/samples/poc-subapp/src/.babelrc.js deleted file mode 100644 index 8d166bca2..000000000 --- a/samples/poc-subapp/src/.babelrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: "@xarc/app-dev/config/babel/babelrc-client.js" -}; diff --git a/samples/poc-subapp/src/server-routes/.babelrc.js b/samples/poc-subapp/src/server-routes/.babelrc.js deleted file mode 100644 index 4ddc80c89..000000000 --- a/samples/poc-subapp/src/server-routes/.babelrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: "@xarc/app-dev/config/babel/babelrc-server.js" -}; diff --git a/samples/poc-subapp/src/server-routes/default/index.js b/samples/poc-subapp/src/server-routes/default/index.js index 4bb49c196..27aca5ebc 100644 --- a/samples/poc-subapp/src/server-routes/default/index.js +++ b/samples/poc-subapp/src/server-routes/default/index.js @@ -53,7 +53,7 @@ const Template = ( name="MainBody" timestamp elementId="subapp-mainbody" - streaming + useStream async hydrateServerData serverSideRendering @@ -66,7 +66,7 @@ const Template = ( timestamp elementId="subapp-bottom" name="Bottom" - streaming + useStream hydrateServerData async serverSideRendering diff --git a/samples/poc-subapp/src/server/.babelrc.js b/samples/poc-subapp/src/server/.babelrc.js deleted file mode 100644 index 4ddc80c89..000000000 --- a/samples/poc-subapp/src/server/.babelrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: "@xarc/app-dev/config/babel/babelrc-server.js" -};