@anansi/core 0.12.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +18 -7
  3. package/dist/client.js +53 -47
  4. package/dist/client.js.map +1 -1
  5. package/dist/server.js +145 -136
  6. package/dist/server.js.map +1 -1
  7. package/lib/floodSpouts.d.ts +1 -1
  8. package/lib/floodSpouts.d.ts.map +1 -1
  9. package/lib/floodSpouts.js +2 -2
  10. package/lib/index.d.ts +3 -0
  11. package/lib/index.d.ts.map +1 -1
  12. package/lib/index.js +6 -2
  13. package/lib/index.server.d.ts +3 -0
  14. package/lib/index.server.d.ts.map +1 -1
  15. package/lib/index.server.js +6 -2
  16. package/lib/spouts/app.d.ts +5 -0
  17. package/lib/spouts/app.d.ts.map +1 -0
  18. package/lib/spouts/app.js +12 -0
  19. package/lib/spouts/app.server.d.ts +6 -0
  20. package/lib/spouts/app.server.d.ts.map +1 -0
  21. package/lib/spouts/app.server.js +12 -0
  22. package/lib/spouts/document.d.ts +2 -8
  23. package/lib/spouts/document.d.ts.map +1 -1
  24. package/lib/spouts/document.js +4 -6
  25. package/lib/spouts/document.server.d.ts +4 -6
  26. package/lib/spouts/document.server.d.ts.map +1 -1
  27. package/lib/spouts/document.server.js +40 -42
  28. package/lib/spouts/json.d.ts +4 -2
  29. package/lib/spouts/json.d.ts.map +1 -1
  30. package/lib/spouts/json.js +7 -6
  31. package/lib/spouts/json.server.d.ts +4 -6
  32. package/lib/spouts/json.server.d.ts.map +1 -1
  33. package/lib/spouts/json.server.js +32 -34
  34. package/lib/spouts/prefetch.server.d.ts +1 -1
  35. package/lib/spouts/prefetch.server.d.ts.map +1 -1
  36. package/lib/spouts/prefetch.server.js +1 -1
  37. package/lib/spouts/restHooks.d.ts +3 -3
  38. package/lib/spouts/restHooks.d.ts.map +1 -1
  39. package/lib/spouts/restHooks.js +9 -11
  40. package/lib/spouts/restHooks.server.d.ts +8 -45
  41. package/lib/spouts/restHooks.server.d.ts.map +1 -1
  42. package/lib/spouts/restHooks.server.js +15 -12
  43. package/lib/spouts/router.d.ts +3 -4
  44. package/lib/spouts/router.d.ts.map +1 -1
  45. package/lib/spouts/router.js +14 -13
  46. package/lib/spouts/router.server.d.ts +3 -4
  47. package/lib/spouts/router.server.d.ts.map +1 -1
  48. package/lib/spouts/router.server.js +17 -15
  49. package/lib/spouts/types.d.ts +2 -0
  50. package/lib/spouts/types.d.ts.map +1 -1
  51. package/lib/spouts/types.js +1 -1
  52. package/package.json +11 -7
  53. package/src/floodSpouts.tsx +2 -2
  54. package/src/index.server.ts +3 -0
  55. package/src/index.ts +3 -0
  56. package/src/spouts/app.server.tsx +8 -0
  57. package/src/spouts/app.tsx +6 -0
  58. package/src/spouts/document.server.tsx +64 -68
  59. package/src/spouts/document.tsx +5 -14
  60. package/src/spouts/json.server.tsx +41 -45
  61. package/src/spouts/json.tsx +8 -16
  62. package/src/spouts/prefetch.server.tsx +8 -4
  63. package/src/spouts/restHooks.server.tsx +27 -22
  64. package/src/spouts/restHooks.tsx +12 -18
  65. package/src/spouts/router.server.tsx +27 -21
  66. package/src/spouts/router.tsx +19 -19
  67. package/src/spouts/types.ts +18 -0
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/spouts/router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI1D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACvE,6CAmBoB,OAAO,MAAM,EAAE,OAAO,CAAC,+BAEhB,OAAO,MAAM,EAAE,OAAO,CAAC;;;;GAgBlD"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/spouts/router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACvE,GAAG,WAAW,CACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IACE,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;IACzC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;CAClD,CACF,CAiCA"}
@@ -25,19 +25,20 @@ function routerSpout(options) {
25
25
  }, void 0, children);
26
26
  };
27
27
 
28
- return function (next) {
29
- return async initData => {
30
- const history = (0, _history.createBrowserHistory)();
31
- const router = options.createRouter(history);
32
- const matchedRoutes = router.getMatchedRoutes(history.location.pathname);
33
- const nextProps = await next(initData);
34
- const Router = createRouteComponent(router);
35
- return { ...nextProps,
36
- matchedRoutes,
37
- router,
38
- app: /*#__PURE__*/(0, _jsx2.default)(Router, {}, void 0, nextProps.app)
39
- };
28
+ return next => async props => {
29
+ const history = (0, _history.createBrowserHistory)();
30
+ const router = options.createRouter(history);
31
+ const matchedRoutes = router.getMatchedRoutes(history.location.pathname);
32
+ const nextProps = await next({ ...props,
33
+ matchedRoutes,
34
+ router
35
+ });
36
+ const Router = createRouteComponent(router);
37
+ return { ...nextProps,
38
+ matchedRoutes,
39
+ router,
40
+ app: /*#__PURE__*/(0, _jsx2.default)(Router, {}, void 0, nextProps.app)
40
41
  };
41
42
  };
42
43
  }
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb3V0ZXJTcG91dCIsIm9wdGlvbnMiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsImNoaWxkcmVuIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsIm9uQ2hhbmdlIiwibmV4dCIsImluaXREYXRhIiwiaGlzdG9yeSIsImNyZWF0ZUJyb3dzZXJIaXN0b3J5IiwiY3JlYXRlUm91dGVyIiwibWF0Y2hlZFJvdXRlcyIsImdldE1hdGNoZWRSb3V0ZXMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV4dFByb3BzIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yb3V0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlLCBSb3V0ZVByb3ZpZGVyLCBSb3V0ZUNvbnRyb2xsZXIgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3Nlckhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCB0eXBlIHsgVXBkYXRlIH0gZnJvbSAnaGlzdG9yeSc7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVByb3BzLCBDcmVhdGVSb3V0ZXIgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBOZWVkZWRQcm9wcyA9IFJlc29sdmVQcm9wcztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm91dGVyU3BvdXQ8UmVzb2x2ZVdpdGg+KG9wdGlvbnM6IHtcbiAgcmVzb2x2ZVdpdGg/OiBhbnk7XG4gIHVzZVJlc29sdmVXaXRoOiAoKSA9PiBSZXNvbHZlV2l0aDtcbiAgY3JlYXRlUm91dGVyOiBDcmVhdGVSb3V0ZXI8UmVzb2x2ZVdpdGg+O1xuICBvbkNoYW5nZT86ICh1cGRhdGU6IFVwZGF0ZSwgY2FsbGJhY2s6ICgpID0+IHZvaWQgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGNyZWF0ZVJvdXRlQ29tcG9uZW50ID0gKFxuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PixcbiAgKSA9PlxuICAgIGZ1bmN0aW9uIFJvdXRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gICAgICBjb25zdCByZXNvbHZlV2l0aCA9IG9wdGlvbnMudXNlUmVzb2x2ZVdpdGgoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvdXRlUHJvdmlkZXJcbiAgICAgICAgICByb3V0ZXI9e3JvdXRlcn1cbiAgICAgICAgICByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9XG4gICAgICAgICAgb25DaGFuZ2U9e29wdGlvbnMub25DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOZWVkZWRQcm9wcz4oXG4gICAgbmV4dDogKGluaXREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxUPixcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIChpbml0RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBjcmVhdGVCcm93c2VySGlzdG9yeSgpO1xuICAgICAgY29uc3Qgcm91dGVyID0gb3B0aW9ucy5jcmVhdGVSb3V0ZXIoaGlzdG9yeSk7XG4gICAgICBjb25zdCBtYXRjaGVkUm91dGVzID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXMoaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSk7XG5cbiAgICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoaW5pdERhdGEpO1xuXG4gICAgICBjb25zdCBSb3V0ZXIgPSBjcmVhdGVSb3V0ZUNvbXBvbmVudChyb3V0ZXIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIGFwcDogPFJvdXRlcj57bmV4dFByb3BzLmFwcH08L1JvdXRlcj4sXG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQU9lLFNBQVNBLFdBQVQsQ0FBa0NDLE9BQWxDLEVBS1o7RUFDRCxNQUFNQyxvQkFBb0IsR0FDeEJDLE1BRDJCLElBRzNCLFNBQVNDLE1BQVQsQ0FBZ0I7SUFBRUM7RUFBRixDQUFoQixFQUE2RDtJQUMzRCxNQUFNQyxXQUFXLEdBQUdMLE9BQU8sQ0FBQ00sY0FBUixFQUFwQjtJQUVBLG9CQUNFLG1CQUFDLHFCQUFEO01BQ0UsTUFBTSxFQUFFSixNQURWO01BRUUsV0FBVyxFQUFFRyxXQUZmO01BR0UsUUFBUSxFQUFFTCxPQUFPLENBQUNPO0lBSHBCLFdBS0dILFFBTEgsQ0FERjtFQVNELENBZkg7O0VBaUJBLE9BQU8sVUFDTEksSUFESyxFQUVMO0lBQ0EsT0FBTyxNQUFPQyxRQUFQLElBQTZDO01BQ2xELE1BQU1DLE9BQU8sR0FBRyxJQUFBQyw2QkFBQSxHQUFoQjtNQUNBLE1BQU1ULE1BQU0sR0FBR0YsT0FBTyxDQUFDWSxZQUFSLENBQXFCRixPQUFyQixDQUFmO01BQ0EsTUFBTUcsYUFBYSxHQUFHWCxNQUFNLENBQUNZLGdCQUFQLENBQXdCSixPQUFPLENBQUNLLFFBQVIsQ0FBaUJDLFFBQXpDLENBQXRCO01BRUEsTUFBTUMsU0FBUyxHQUFHLE1BQU1ULElBQUksQ0FBQ0MsUUFBRCxDQUE1QjtNQUVBLE1BQU1OLE1BQU0sR0FBR0Ysb0JBQW9CLENBQUNDLE1BQUQsQ0FBbkM7TUFDQSxPQUFPLEVBQ0wsR0FBR2UsU0FERTtRQUVMSixhQUZLO1FBR0xYLE1BSEs7UUFJTGdCLEdBQUcsZUFBRSxtQkFBQyxNQUFELGNBQVNELFNBQVMsQ0FBQ0MsR0FBbkI7TUFKQSxDQUFQO0lBTUQsQ0FkRDtFQWVELENBbEJEO0FBbUJEIn0=
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb3V0ZXJTcG91dCIsIm9wdGlvbnMiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsImNoaWxkcmVuIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsIm9uQ2hhbmdlIiwibmV4dCIsInByb3BzIiwiaGlzdG9yeSIsImNyZWF0ZUJyb3dzZXJIaXN0b3J5IiwiY3JlYXRlUm91dGVyIiwibWF0Y2hlZFJvdXRlcyIsImdldE1hdGNoZWRSb3V0ZXMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV4dFByb3BzIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yb3V0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlLCBSb3V0ZVByb3ZpZGVyLCBSb3V0ZUNvbnRyb2xsZXIgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3Nlckhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCB0eXBlIHsgVXBkYXRlIH0gZnJvbSAnaGlzdG9yeSc7XG5cbmltcG9ydCB0eXBlIHsgQ3JlYXRlUm91dGVyLCBDbGllbnRTcG91dCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXJTcG91dDxSZXNvbHZlV2l0aD4ob3B0aW9uczoge1xuICByZXNvbHZlV2l0aD86IGFueTtcbiAgdXNlUmVzb2x2ZVdpdGg6ICgpID0+IFJlc29sdmVXaXRoO1xuICBjcmVhdGVSb3V0ZXI6IENyZWF0ZVJvdXRlcjxSZXNvbHZlV2l0aD47XG4gIG9uQ2hhbmdlPzogKHVwZGF0ZTogVXBkYXRlLCBjYWxsYmFjazogKCkgPT4gdm9pZCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn0pOiBDbGllbnRTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHtcbiAgICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aCwgYW55PltdO1xuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PjtcbiAgfVxuPiB7XG4gIGNvbnN0IGNyZWF0ZVJvdXRlQ29tcG9uZW50ID0gKFxuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PixcbiAgKSA9PlxuICAgIGZ1bmN0aW9uIFJvdXRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gICAgICBjb25zdCByZXNvbHZlV2l0aCA9IG9wdGlvbnMudXNlUmVzb2x2ZVdpdGgoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvdXRlUHJvdmlkZXJcbiAgICAgICAgICByb3V0ZXI9e3JvdXRlcn1cbiAgICAgICAgICByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9XG4gICAgICAgICAgb25DaGFuZ2U9e29wdGlvbnMub25DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgaGlzdG9yeSA9IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCk7XG4gICAgY29uc3Qgcm91dGVyID0gb3B0aW9ucy5jcmVhdGVSb3V0ZXIoaGlzdG9yeSk7XG4gICAgY29uc3QgbWF0Y2hlZFJvdXRlcyA9IHJvdXRlci5nZXRNYXRjaGVkUm91dGVzKGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7IC4uLnByb3BzLCBtYXRjaGVkUm91dGVzLCByb3V0ZXIgfSk7XG5cbiAgICBjb25zdCBSb3V0ZXIgPSBjcmVhdGVSb3V0ZUNvbXBvbmVudChyb3V0ZXIpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICB9O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLZSxTQUFTQSxXQUFULENBQWtDQyxPQUFsQyxFQVdiO0VBQ0EsTUFBTUMsb0JBQW9CLEdBQ3hCQyxNQUQyQixJQUczQixTQUFTQyxNQUFULENBQWdCO0lBQUVDO0VBQUYsQ0FBaEIsRUFBNkQ7SUFDM0QsTUFBTUMsV0FBVyxHQUFHTCxPQUFPLENBQUNNLGNBQVIsRUFBcEI7SUFFQSxvQkFDRSxtQkFBQyxxQkFBRDtNQUNFLE1BQU0sRUFBRUosTUFEVjtNQUVFLFdBQVcsRUFBRUcsV0FGZjtNQUdFLFFBQVEsRUFBRUwsT0FBTyxDQUFDTztJQUhwQixXQUtHSCxRQUxILENBREY7RUFTRCxDQWZIOztFQWlCQSxPQUFPSSxJQUFJLElBQUksTUFBTUMsS0FBTixJQUFlO0lBQzVCLE1BQU1DLE9BQU8sR0FBRyxJQUFBQyw2QkFBQSxHQUFoQjtJQUNBLE1BQU1ULE1BQU0sR0FBR0YsT0FBTyxDQUFDWSxZQUFSLENBQXFCRixPQUFyQixDQUFmO0lBQ0EsTUFBTUcsYUFBYSxHQUFHWCxNQUFNLENBQUNZLGdCQUFQLENBQXdCSixPQUFPLENBQUNLLFFBQVIsQ0FBaUJDLFFBQXpDLENBQXRCO0lBRUEsTUFBTUMsU0FBUyxHQUFHLE1BQU1ULElBQUksQ0FBQyxFQUFFLEdBQUdDLEtBQUw7TUFBWUksYUFBWjtNQUEyQlg7SUFBM0IsQ0FBRCxDQUE1QjtJQUVBLE1BQU1DLE1BQU0sR0FBR0Ysb0JBQW9CLENBQUNDLE1BQUQsQ0FBbkM7SUFDQSxPQUFPLEVBQ0wsR0FBR2UsU0FERTtNQUVMSixhQUZLO01BR0xYLE1BSEs7TUFJTGdCLEdBQUcsZUFBRSxtQkFBQyxNQUFELGNBQVNELFNBQVMsQ0FBQ0MsR0FBbkI7SUFKQSxDQUFQO0VBTUQsQ0FkRDtBQWVEIn0=
@@ -1,12 +1,11 @@
1
1
  import { Route, RouteController } from '@anansi/router';
2
- import type { ResolveProps, ServerProps, CreateRouter } from './types';
2
+ import type { CreateRouter, ServerSpout } from './types';
3
3
  export default function routerSpout<ResolveWith>(options: {
4
4
  resolveWith?: any;
5
5
  useResolveWith: () => ResolveWith;
6
6
  createRouter: CreateRouter<ResolveWith>;
7
- }): <T extends ResolveProps>(next: (props: ServerProps) => Promise<T>) => (props: ServerProps) => Promise<T & {
8
- matchedRoutes: Route<ResolveWith, any>[];
7
+ }): ServerSpout<Record<string, unknown>, {
8
+ matchedRoutes: Route<ResolveWith>[];
9
9
  router: RouteController<Route<ResolveWith, any>>;
10
- app: JSX.Element;
11
10
  }>;
12
11
  //# sourceMappingURL=router.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.server.d.ts","sourceRoot":"","sources":["../../src/spouts/router.server.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIvE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvE,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;CACzC,0CAeiB,WAAW,4BAEJ,WAAW;;;;GAkBnC"}
1
+ {"version":3,"file":"router.server.d.ts","sourceRoot":"","sources":["../../src/spouts/router.server.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIvE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;CACzC,GAAG,WAAW,CACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IACE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;CAClD,CACF,CAqCA"}
@@ -24,21 +24,23 @@ function routerSpout(options) {
24
24
  }, void 0, children);
25
25
  };
26
26
 
27
- return function (next) {
28
- return async props => {
29
- const url = props.req.url || '';
30
- const router = options.createRouter((0, _history.createMemoryHistory)({
31
- initialEntries: [url]
32
- }));
33
- const matchedRoutes = router.getMatchedRoutes(url);
34
- const nextProps = await next(props);
35
- const Router = createRouteComponent(router);
36
- return { ...nextProps,
37
- matchedRoutes,
38
- router,
39
- app: /*#__PURE__*/(0, _jsx2.default)(Router, {}, void 0, nextProps.app)
40
- };
27
+ return next => async props => {
28
+ const url = props.req.url || '';
29
+ const router = options.createRouter((0, _history.createMemoryHistory)({
30
+ initialEntries: [url]
31
+ }));
32
+ const matchedRoutes = router.getMatchedRoutes(url);
33
+ const nextProps = await next({ ...props,
34
+ matchedRoutes,
35
+ router
36
+ });
37
+ const Router = createRouteComponent(router);
38
+ return { ...nextProps,
39
+ app: /*#__PURE__*/(0, _jsx2.default)(Router, {}, void 0, nextProps.app),
40
+ // TODO: figure out how to only inject in next and not have to also put here
41
+ matchedRoutes,
42
+ router
41
43
  };
42
44
  };
43
45
  }
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb3V0ZXJTcG91dCIsIm9wdGlvbnMiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsImNoaWxkcmVuIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsIm5leHQiLCJwcm9wcyIsInVybCIsInJlcSIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJpbml0aWFsRW50cmllcyIsIm1hdGNoZWRSb3V0ZXMiLCJnZXRNYXRjaGVkUm91dGVzIiwibmV4dFByb3BzIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZSwgUm91dGVQcm92aWRlciwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcblxuaW1wb3J0IHR5cGUgeyBSZXNvbHZlUHJvcHMsIFNlcnZlclByb3BzLCBDcmVhdGVSb3V0ZXIgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBOZWVkZWRQcm9wcyA9IFJlc29sdmVQcm9wcztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm91dGVyU3BvdXQ8UmVzb2x2ZVdpdGg+KG9wdGlvbnM6IHtcbiAgcmVzb2x2ZVdpdGg/OiBhbnk7XG4gIHVzZVJlc29sdmVXaXRoOiAoKSA9PiBSZXNvbHZlV2l0aDtcbiAgY3JlYXRlUm91dGVyOiBDcmVhdGVSb3V0ZXI8UmVzb2x2ZVdpdGg+O1xufSkge1xuICBjb25zdCBjcmVhdGVSb3V0ZUNvbXBvbmVudCA9IChcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj4sXG4gICkgPT5cbiAgICBmdW5jdGlvbiBSb3V0ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgICAgY29uc3QgcmVzb2x2ZVdpdGggPSBvcHRpb25zLnVzZVJlc29sdmVXaXRoKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb3V0ZVByb3ZpZGVyIHJvdXRlcj17cm91dGVyfSByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIE5lZWRlZFByb3BzPihcbiAgICBuZXh0OiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPFQ+LFxuICApIHtcbiAgICByZXR1cm4gYXN5bmMgKHByb3BzOiBTZXJ2ZXJQcm9wcykgPT4ge1xuICAgICAgY29uc3QgdXJsID0gcHJvcHMucmVxLnVybCB8fCAnJztcbiAgICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgICBjcmVhdGVNZW1vcnlIaXN0b3J5KHsgaW5pdGlhbEVudHJpZXM6IFt1cmxdIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBTWUsU0FBU0EsV0FBVCxDQUFrQ0MsT0FBbEMsRUFJWjtFQUNELE1BQU1DLG9CQUFvQixHQUN4QkMsTUFEMkIsSUFHM0IsU0FBU0MsTUFBVCxDQUFnQjtJQUFFQztFQUFGLENBQWhCLEVBQTZEO0lBQzNELE1BQU1DLFdBQVcsR0FBR0wsT0FBTyxDQUFDTSxjQUFSLEVBQXBCO0lBRUEsb0JBQ0UsbUJBQUMscUJBQUQ7TUFBZSxNQUFNLEVBQUVKLE1BQXZCO01BQStCLFdBQVcsRUFBRUc7SUFBNUMsV0FDR0QsUUFESCxDQURGO0VBS0QsQ0FYSDs7RUFhQSxPQUFPLFVBQ0xHLElBREssRUFFTDtJQUNBLE9BQU8sTUFBT0MsS0FBUCxJQUE4QjtNQUNuQyxNQUFNQyxHQUFHLEdBQUdELEtBQUssQ0FBQ0UsR0FBTixDQUFVRCxHQUFWLElBQWlCLEVBQTdCO01BQ0EsTUFBTVAsTUFBTSxHQUFHRixPQUFPLENBQUNXLFlBQVIsQ0FDYixJQUFBQyw0QkFBQSxFQUFvQjtRQUFFQyxjQUFjLEVBQUUsQ0FBQ0osR0FBRDtNQUFsQixDQUFwQixDQURhLENBQWY7TUFHQSxNQUFNSyxhQUFtQyxHQUFHWixNQUFNLENBQUNhLGdCQUFQLENBQXdCTixHQUF4QixDQUE1QztNQUVBLE1BQU1PLFNBQVMsR0FBRyxNQUFNVCxJQUFJLENBQUNDLEtBQUQsQ0FBNUI7TUFFQSxNQUFNTCxNQUFNLEdBQUdGLG9CQUFvQixDQUFDQyxNQUFELENBQW5DO01BQ0EsT0FBTyxFQUNMLEdBQUdjLFNBREU7UUFFTEYsYUFGSztRQUdMWixNQUhLO1FBSUxlLEdBQUcsZUFBRSxtQkFBQyxNQUFELGNBQVNELFNBQVMsQ0FBQ0MsR0FBbkI7TUFKQSxDQUFQO0lBTUQsQ0FoQkQ7RUFpQkQsQ0FwQkQ7QUFxQkQifQ==
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb3V0ZXJTcG91dCIsIm9wdGlvbnMiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsImNoaWxkcmVuIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsIm5leHQiLCJwcm9wcyIsInVybCIsInJlcSIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJpbml0aWFsRW50cmllcyIsIm1hdGNoZWRSb3V0ZXMiLCJnZXRNYXRjaGVkUm91dGVzIiwibmV4dFByb3BzIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZSwgUm91dGVQcm92aWRlciwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVSb3V0ZXIsIFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJvdXRlclNwb3V0PFJlc29sdmVXaXRoPihvcHRpb25zOiB7XG4gIHJlc29sdmVXaXRoPzogYW55O1xuICB1c2VSZXNvbHZlV2l0aDogKCkgPT4gUmVzb2x2ZVdpdGg7XG4gIGNyZWF0ZVJvdXRlcjogQ3JlYXRlUm91dGVyPFJlc29sdmVXaXRoPjtcbn0pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHtcbiAgICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXTtcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj47XG4gIH1cbj4ge1xuICBjb25zdCBjcmVhdGVSb3V0ZUNvbXBvbmVudCA9IChcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj4sXG4gICkgPT5cbiAgICBmdW5jdGlvbiBSb3V0ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgICAgY29uc3QgcmVzb2x2ZVdpdGggPSBvcHRpb25zLnVzZVJlc29sdmVXaXRoKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb3V0ZVByb3ZpZGVyIHJvdXRlcj17cm91dGVyfSByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB1cmwgPSBwcm9wcy5yZXEudXJsIHx8ICcnO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFJZSxTQUFTQSxXQUFULENBQWtDQyxPQUFsQyxFQVViO0VBQ0EsTUFBTUMsb0JBQW9CLEdBQ3hCQyxNQUQyQixJQUczQixTQUFTQyxNQUFULENBQWdCO0lBQUVDO0VBQUYsQ0FBaEIsRUFBNkQ7SUFDM0QsTUFBTUMsV0FBVyxHQUFHTCxPQUFPLENBQUNNLGNBQVIsRUFBcEI7SUFFQSxvQkFDRSxtQkFBQyxxQkFBRDtNQUFlLE1BQU0sRUFBRUosTUFBdkI7TUFBK0IsV0FBVyxFQUFFRztJQUE1QyxXQUNHRCxRQURILENBREY7RUFLRCxDQVhIOztFQWFBLE9BQU9HLElBQUksSUFBSSxNQUFNQyxLQUFOLElBQWU7SUFDNUIsTUFBTUMsR0FBRyxHQUFHRCxLQUFLLENBQUNFLEdBQU4sQ0FBVUQsR0FBVixJQUFpQixFQUE3QjtJQUNBLE1BQU1QLE1BQU0sR0FBR0YsT0FBTyxDQUFDVyxZQUFSLENBQ2IsSUFBQUMsNEJBQUEsRUFBb0I7TUFBRUMsY0FBYyxFQUFFLENBQUNKLEdBQUQ7SUFBbEIsQ0FBcEIsQ0FEYSxDQUFmO0lBR0EsTUFBTUssYUFBbUMsR0FBR1osTUFBTSxDQUFDYSxnQkFBUCxDQUF3Qk4sR0FBeEIsQ0FBNUM7SUFFQSxNQUFNTyxTQUFTLEdBQUcsTUFBTVQsSUFBSSxDQUFDLEVBQzNCLEdBQUdDLEtBRHdCO01BRTNCTSxhQUYyQjtNQUczQlo7SUFIMkIsQ0FBRCxDQUE1QjtJQU1BLE1BQU1DLE1BQU0sR0FBR0Ysb0JBQW9CLENBQUNDLE1BQUQsQ0FBbkM7SUFFQSxPQUFPLEVBQ0wsR0FBR2MsU0FERTtNQUVMQyxHQUFHLGVBQUUsbUJBQUMsTUFBRCxjQUFTRCxTQUFTLENBQUNDLEdBQW5CLENBRkE7TUFHTDtNQUNBSCxhQUpLO01BS0xaO0lBTEssQ0FBUDtFQU9ELENBdEJEO0FBdUJEIn0=
@@ -14,4 +14,6 @@ export declare type ResolveProps = {
14
14
  app: JSX.Element;
15
15
  };
16
16
  export declare type CreateRouter<T> = (history: History) => RouteController<Route<T, any>>;
17
+ export declare type ServerSpout<NeededProps extends Record<string, unknown> = Record<string, unknown>, ProvidedProps extends Record<string, unknown> = Record<string, unknown>, NeededNext extends Record<string, unknown> = NeededProps> = <N extends NeededNext & ResolveProps, I extends NeededProps & ServerProps>(next: (props: I & ProvidedProps) => Promise<N>) => (props: I) => Promise<N & ProvidedProps>;
18
+ export declare type ClientSpout<NeededProps extends Record<string, unknown> = Record<string, unknown>, ProvidedProps extends Record<string, unknown> = Record<string, unknown>, NeededNext extends Record<string, unknown> = NeededProps> = <N extends NeededNext & ResolveProps, I extends NeededProps>(next: (props: I & ProvidedProps) => Promise<N>) => (props: I) => Promise<N & ProvidedProps>;
17
19
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/spouts/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGxD,oBAAY,WAAW,GAAG;IACxB,GAAG,EAAE,OAAO,GAAG,eAAe,CAAC;IAC/B,GAAG,EAAE,QAAQ,GAAG,cAAc,CAAC;IAC/B,cAAc,EAAE,gBAAgB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,oBAAY,YAAY,GAAG;IACzB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,YAAY,CAAC,CAAC,IAAI,CAC5B,OAAO,EAAE,OAAO,KACb,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/spouts/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGxD,oBAAY,WAAW,GAAG;IACxB,GAAG,EAAE,OAAO,GAAG,eAAe,CAAC;IAC/B,GAAG,EAAE,QAAQ,GAAG,cAAc,CAAC;IAC/B,cAAc,EAAE,gBAAgB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,oBAAY,YAAY,GAAG;IACzB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,YAAY,CAAC,CAAC,IAAI,CAC5B,OAAO,EAAE,OAAO,KACb,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAGpC,oBAAY,WAAW,CACrB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,IACtD,CAAC,CAAC,SAAS,UAAU,GAAG,YAAY,EAAE,CAAC,SAAS,WAAW,GAAG,WAAW,EAC3E,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAC3C,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;AAG9C,oBAAY,WAAW,CACrB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,IACtD,CAAC,CAAC,SAAS,UAAU,GAAG,YAAY,EAAE,CAAC,SAAS,WAAW,EAC7D,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAC3C,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHR5cGUgeyBTdGF0c0NvbXBpbGF0aW9uIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG4vKiBWYXJpYWJsZXMgZnJvbSB0aGUgcmVuZGVyaW5nIGNhbGwgKi9cbmV4cG9ydCB0eXBlIFNlcnZlclByb3BzID0ge1xuICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2U7XG4gIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZTtcbiAgY2xpZW50TWFuaWZlc3Q6IFN0YXRzQ29tcGlsYXRpb247XG4gIG5vbmNlOiBzdHJpbmc7XG59O1xuXG4vKiBCYXNlbGluZSBleHBlY3RhdGlvbnMgb2YgcmV0dXJuIHZhbHVlICovXG5leHBvcnQgdHlwZSBSZXNvbHZlUHJvcHMgPSB7XG4gIGFwcDogSlNYLkVsZW1lbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXI8VD4gPSAoXG4gIGhpc3Rvcnk6IEhpc3RvcnksXG4pID0+IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxULCBhbnk+PjtcbiJdLCJtYXBwaW5ncyI6IiJ9
4
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHR5cGUgeyBTdGF0c0NvbXBpbGF0aW9uIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG4vKiBWYXJpYWJsZXMgZnJvbSB0aGUgcmVuZGVyaW5nIGNhbGwgKi9cbmV4cG9ydCB0eXBlIFNlcnZlclByb3BzID0ge1xuICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2U7XG4gIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZTtcbiAgY2xpZW50TWFuaWZlc3Q6IFN0YXRzQ29tcGlsYXRpb247XG4gIG5vbmNlOiBzdHJpbmc7XG59O1xuXG4vKiBCYXNlbGluZSBleHBlY3RhdGlvbnMgb2YgcmV0dXJuIHZhbHVlICovXG5leHBvcnQgdHlwZSBSZXNvbHZlUHJvcHMgPSB7XG4gIGFwcDogSlNYLkVsZW1lbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXI8VD4gPSAoXG4gIGhpc3Rvcnk6IEhpc3RvcnksXG4pID0+IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxULCBhbnk+PjtcblxuLyogU3BvdXRzIGFyZSBtaWRkbGV3YXJlIGZvciBBbmFuc2kgKi9cbmV4cG9ydCB0eXBlIFNlcnZlclNwb3V0PFxuICBOZWVkZWRQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFByb3ZpZGVkUHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBOZWVkZWRQcm9wcyxcbj4gPSA8TiBleHRlbmRzIE5lZWRlZE5leHQgJiBSZXNvbHZlUHJvcHMsIEkgZXh0ZW5kcyBOZWVkZWRQcm9wcyAmIFNlcnZlclByb3BzPihcbiAgbmV4dDogKHByb3BzOiBJICYgUHJvdmlkZWRQcm9wcykgPT4gUHJvbWlzZTxOPixcbikgPT4gKHByb3BzOiBJKSA9PiBQcm9taXNlPE4gJiBQcm92aWRlZFByb3BzPjtcblxuLyogU3BvdXRzIGFyZSBtaWRkbGV3YXJlIGZvciBBbmFuc2kgKi9cbmV4cG9ydCB0eXBlIENsaWVudFNwb3V0PFxuICBOZWVkZWRQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFByb3ZpZGVkUHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBOZWVkZWRQcm9wcyxcbj4gPSA8TiBleHRlbmRzIE5lZWRlZE5leHQgJiBSZXNvbHZlUHJvcHMsIEkgZXh0ZW5kcyBOZWVkZWRQcm9wcz4oXG4gIG5leHQ6IChwcm9wczogSSAmIFByb3ZpZGVkUHJvcHMpID0+IFByb21pc2U8Tj4sXG4pID0+IChwcm9wczogSSkgPT4gUHJvbWlzZTxOICYgUHJvdmlkZWRQcm9wcz47XG4iXSwibWFwcGluZ3MiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anansi/core",
3
- "version": "0.12.0",
3
+ "version": "0.14.1",
4
4
  "description": "React 18 Framework",
5
5
  "homepage": "https://github.com/ntucker/anansi/tree/master/packages/core#readme",
6
6
  "repository": {
@@ -65,22 +65,22 @@
65
65
  "browser"
66
66
  ],
67
67
  "devDependencies": {
68
- "@anansi/babel-preset": "^3.2.5",
68
+ "@anansi/babel-preset": "^3.2.7",
69
69
  "@anansi/browserslist-config": "1.3.3",
70
- "@anansi/webpack-config": "^11.6.5",
71
- "@babel/cli": "7.17.10",
72
- "@babel/core": "7.18.5",
70
+ "@anansi/webpack-config": "^11.6.7",
71
+ "@babel/cli": "7.18.6",
72
+ "@babel/core": "7.18.6",
73
73
  "@types/compression": "^1.7.2",
74
74
  "@types/source-map-support": "^0.5.4",
75
75
  "@types/tmp": "^0.2.3",
76
76
  "@types/webpack-hot-middleware": "^2.25.6",
77
- "jest": "28.1.1",
77
+ "jest": "28.1.2",
78
78
  "rimraf": "^3.0.0",
79
79
  "webpack": "^5.72.1",
80
80
  "webpack-cli": "4.10.0"
81
81
  },
82
82
  "dependencies": {
83
- "@anansi/router": "^0.6.3",
83
+ "@anansi/router": "^0.6.5",
84
84
  "@babel/runtime": "^7.10.5",
85
85
  "@rest-hooks/ssr": "^0.2.0",
86
86
  "chalk": "^4.0.0",
@@ -104,6 +104,7 @@
104
104
  "@types/react-dom": "^17.0.40 || ^18.0.0-0",
105
105
  "react": "^18.0.0-0",
106
106
  "react-dom": "^18.0.0-0",
107
+ "rest-hooks": "^6.0.0",
107
108
  "webpack": "^5.60.0"
108
109
  },
109
110
  "peerDependenciesMeta": {
@@ -115,6 +116,9 @@
115
116
  },
116
117
  "@types/react-dom": {
117
118
  "optional": true
119
+ },
120
+ "rest-hooks": {
121
+ "optional": true
118
122
  }
119
123
  },
120
124
  "engines": {
@@ -1,12 +1,12 @@
1
1
  import { hydrateRoot } from 'react-dom/client';
2
2
 
3
3
  export default async function floodSpouts(
4
- spouts: () => Promise<{
4
+ spouts: (props: Record<string, unknown>) => Promise<{
5
5
  app: JSX.Element;
6
6
  }>,
7
7
  { rootId = 'anansi-root' }: { rootId?: string } = {},
8
8
  ) {
9
- const { app } = await spouts();
9
+ const { app } = await spouts({});
10
10
 
11
11
  hydrateRoot(document.getElementById(rootId) ?? document, app);
12
12
  }
@@ -4,3 +4,6 @@ export { default as restHooksSpout } from './spouts/restHooks.server';
4
4
  export { default as routerSpout } from './spouts/router.server';
5
5
  export { default as prefetchSpout } from './spouts/prefetch.server';
6
6
  export { default as JSONSpout } from './spouts/json.server';
7
+ export { default as appSpout } from './spouts/app.server';
8
+ export type { ServerProps } from './spouts/types';
9
+ export type { ServerSpout as Spout } from './spouts/types';
package/src/index.ts CHANGED
@@ -3,3 +3,6 @@ export { default as documentSpout } from './spouts/document';
3
3
  export { default as restHooksSpout } from './spouts/restHooks';
4
4
  export { default as routerSpout } from './spouts/router';
5
5
  export { default as JSONSpout } from './spouts/json';
6
+ export { default as appSpout } from './spouts/app';
7
+ export type { ServerProps } from './spouts/types';
8
+ export type { ClientSpout as Spout } from './spouts/types';
@@ -0,0 +1,8 @@
1
+ import { ServerProps } from './types';
2
+
3
+ const appSpout =
4
+ (app: JSX.Element) =>
5
+ <P extends ServerProps>(props: P) =>
6
+ Promise.resolve({ ...props, app });
7
+
8
+ export default appSpout;
@@ -0,0 +1,6 @@
1
+ const appSpout =
2
+ (app: JSX.Element) =>
3
+ <P extends Record<string, unknown>>(props: P) =>
4
+ Promise.resolve({ ...props, app });
5
+
6
+ export default appSpout;
@@ -2,15 +2,15 @@ import React from 'react';
2
2
  import type { Route } from '@anansi/router';
3
3
  import { StatsChunkGroup } from 'webpack';
4
4
 
5
- import type { ServerProps, ResolveProps } from './types';
5
+ import type { ServerSpout } from './types';
6
6
  import type { Policy } from './csp';
7
7
  import Document from './DocumentComponent';
8
8
 
9
- type NeededProps = {
9
+ type NeededNext = {
10
10
  matchedRoutes: Route<any>[];
11
11
  title?: string;
12
12
  scripts?: React.ReactNode[];
13
- } & ResolveProps;
13
+ };
14
14
 
15
15
  export default function DocumentSpout(options: {
16
16
  head?: React.ReactNode;
@@ -18,77 +18,73 @@ export default function DocumentSpout(options: {
18
18
  rootId?: string;
19
19
  charSet?: string;
20
20
  csPolicy?: Policy;
21
- }) {
22
- return function <T extends NeededProps>(
23
- next: (props: ServerProps) => Promise<T>,
24
- ) {
25
- return async (props: ServerProps) => {
26
- const nextProps = await next(props);
21
+ }): ServerSpout<Record<string, unknown>, Record<string, unknown>, NeededNext> {
22
+ return next => async props => {
23
+ const nextProps = await next(props);
27
24
 
28
- const publicPath = props.clientManifest.publicPath;
25
+ const publicPath = props.clientManifest.publicPath;
29
26
 
30
- if (
31
- Object.keys(props.clientManifest?.entrypoints ?? {}).length < 1 ||
32
- publicPath === undefined
33
- )
34
- throw new Error('Manifest missing entries needed');
27
+ if (
28
+ Object.keys(props.clientManifest?.entrypoints ?? {}).length < 1 ||
29
+ publicPath === undefined
30
+ )
31
+ throw new Error('Manifest missing entries needed');
35
32
 
36
- // TODO: consider using this package for build stats in future:
37
- // https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
38
- const assetMap = (assets: { name: string; size?: number }[]) =>
39
- assets.map(({ name }) => `${publicPath}${name}`);
33
+ // TODO: consider using this package for build stats in future:
34
+ // https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
35
+ const assetMap = (assets: { name: string; size?: number }[]) =>
36
+ assets.map(({ name }) => `${publicPath}${name}`);
40
37
 
41
- const assetList: string[] = [];
42
- Object.values(props.clientManifest?.entrypoints ?? {}).forEach(
43
- entrypoint => {
44
- assetList.push(...assetMap(entrypoint.assets ?? []));
45
- },
46
- );
47
- new Set(
48
- assetMap(
49
- Object.values(props.clientManifest.namedChunkGroups ?? {})
50
- .filter(({ name }) =>
51
- nextProps.matchedRoutes.some(route => name?.includes(route.name)),
52
- )
53
- .flatMap(chunk => [
54
- ...(chunk.assets ?? []),
55
- // any chunk preloads
56
- ...childrenAssets(chunk),
57
- ]),
58
- ),
59
- ).forEach(asset => assetList.push(asset));
38
+ const assetList: string[] = [];
39
+ Object.values(props.clientManifest?.entrypoints ?? {}).forEach(
40
+ entrypoint => {
41
+ assetList.push(...assetMap(entrypoint.assets ?? []));
42
+ },
43
+ );
44
+ new Set(
45
+ assetMap(
46
+ Object.values(props.clientManifest.namedChunkGroups ?? {})
47
+ .filter(({ name }) =>
48
+ nextProps.matchedRoutes.some(route => name?.includes(route.name)),
49
+ )
50
+ .flatMap(chunk => [
51
+ ...(chunk.assets ?? []),
52
+ // any chunk preloads
53
+ ...childrenAssets(chunk),
54
+ ]),
55
+ ),
56
+ ).forEach(asset => assetList.push(asset));
60
57
 
61
- // find additional assets to preload based on matched route
62
- const assets: {
63
- href: string;
64
- as?: string | undefined;
65
- rel?: string | undefined;
66
- }[] = assetList
67
- .filter(asset => !asset.endsWith('.hot-update.js'))
68
- .map(asset =>
69
- asset.endsWith('.css')
70
- ? { href: asset, rel: 'stylesheet' }
71
- : asset.endsWith('.js')
72
- ? { href: asset, as: 'script' }
73
- : { href: asset },
74
- );
58
+ // find additional assets to preload based on matched route
59
+ const assets: {
60
+ href: string;
61
+ as?: string | undefined;
62
+ rel?: string | undefined;
63
+ }[] = assetList
64
+ .filter(asset => !asset.endsWith('.hot-update.js'))
65
+ .map(asset =>
66
+ asset.endsWith('.css')
67
+ ? { href: asset, rel: 'stylesheet' }
68
+ : asset.endsWith('.js')
69
+ ? { href: asset, as: 'script' }
70
+ : { href: asset },
71
+ );
75
72
 
76
- return {
77
- ...nextProps,
78
- app: (
79
- <Document
80
- {...options}
81
- title={nextProps.title ?? options.title}
82
- assets={assets}
83
- rootId={options.rootId}
84
- nonce={props.nonce}
85
- csPolicy={options.csPolicy}
86
- scripts={nextProps.scripts}
87
- >
88
- {nextProps.app}
89
- </Document>
90
- ),
91
- };
73
+ return {
74
+ ...nextProps,
75
+ app: (
76
+ <Document
77
+ {...options}
78
+ title={nextProps.title ?? options.title}
79
+ assets={assets}
80
+ rootId={options.rootId}
81
+ nonce={props.nonce}
82
+ csPolicy={options.csPolicy}
83
+ scripts={nextProps.scripts}
84
+ >
85
+ {nextProps.app}
86
+ </Document>
87
+ ),
92
88
  };
93
89
  };
94
90
  }
@@ -1,24 +1,15 @@
1
1
  import React from 'react';
2
2
  import type { Route } from '@anansi/router';
3
3
 
4
- import type { ResolveProps } from './types';
5
-
6
- type NeededProps = {
7
- matchedRoutes: Route<any>[];
8
- title?: string;
9
- } & ResolveProps;
4
+ import type { ClientSpout } from './types';
10
5
 
11
6
  export default function documentSpout(options: {
12
7
  head?: React.ReactNode;
13
8
  title: string;
14
- }) {
15
- return function <T extends NeededProps>(
16
- next: (initData: Record<string, unknown>) => Promise<T>,
17
- ) {
18
- return async (initData: Record<string, unknown>) => {
19
- const nextProps = await next(initData);
9
+ }): ClientSpout {
10
+ return next => async props => {
11
+ const nextProps = await next(props);
20
12
 
21
- return nextProps;
22
- };
13
+ return nextProps;
23
14
  };
24
15
  }
@@ -1,27 +1,24 @@
1
1
  import React from 'react';
2
- import type { Route } from '@anansi/router';
3
- import { StatsChunkGroup } from 'webpack';
4
2
 
5
- import type { ServerProps, ResolveProps } from './types';
6
- import type { Policy } from './csp';
7
- import Document from './DocumentComponent';
3
+ import type { ServerSpout } from './types';
8
4
 
9
- type NeededProps = {
5
+ type NeededNext = {
10
6
  initData?: Record<string, () => unknown>;
11
7
  scripts?: React.ReactNode[];
12
- } & ResolveProps;
8
+ };
13
9
 
14
10
  export default function JSONSpout({
15
11
  id = 'anansi-json',
16
- }: { id?: string } = {}) {
17
- return function <T extends NeededProps>(
18
- next: (props: ServerProps) => Promise<T>,
19
- ) {
20
- return async (props: ServerProps) => {
21
- const nextProps = await next(props);
12
+ }: { id?: string } = {}): ServerSpout<
13
+ Record<string, unknown>,
14
+ Record<string, unknown>,
15
+ NeededNext
16
+ > {
17
+ return next => async props => {
18
+ const nextProps = await next(props);
22
19
 
23
- const scripts: React.ReactNode[] = nextProps.scripts ?? [];
24
- /*
20
+ const scripts: React.ReactNode[] = nextProps.scripts ?? [];
21
+ /*
25
22
  Object.entries(nextProps.initData ?? {}).forEach(([key, data]) => {
26
23
  try {
27
24
  const encoded = JSON.stringify(data);
@@ -41,37 +38,36 @@ export default function JSONSpout({
41
38
  console.error(e);
42
39
  }
43
40
  });*/
44
- const Script = () => {
45
- try {
46
- const data: any = {};
47
- Object.entries(nextProps.initData ?? {}).forEach(([key, getData]) => {
48
- data[key] = getData();
49
- });
50
- const encoded = JSON.stringify(data);
51
- return (
52
- <script
53
- key={id}
54
- id={id}
55
- type="application/json"
56
- dangerouslySetInnerHTML={{
57
- __html: encoded,
58
- }}
59
- nonce={props.nonce}
60
- />
61
- );
62
- } catch (e) {
63
- // TODO: Use unified logging
64
- console.error('Error serializing json');
65
- console.error(e);
66
- return null;
67
- }
68
- };
69
- scripts.push(<Script />);
41
+ const Script = () => {
42
+ try {
43
+ const data: any = {};
44
+ Object.entries(nextProps.initData ?? {}).forEach(([key, getData]) => {
45
+ data[key] = getData();
46
+ });
47
+ const encoded = JSON.stringify(data);
48
+ return (
49
+ <script
50
+ key={id}
51
+ id={id}
52
+ type="application/json"
53
+ dangerouslySetInnerHTML={{
54
+ __html: encoded,
55
+ }}
56
+ nonce={props.nonce}
57
+ />
58
+ );
59
+ } catch (e) {
60
+ // TODO: Use unified logging
61
+ console.error('Error serializing json');
62
+ console.error(e);
63
+ return null;
64
+ }
65
+ };
66
+ scripts.push(<Script />);
70
67
 
71
- return {
72
- ...nextProps,
73
- scripts,
74
- };
68
+ return {
69
+ ...nextProps,
70
+ scripts,
75
71
  };
76
72
  };
77
73
  }
@@ -1,22 +1,14 @@
1
- import React from 'react';
2
- import type { Route } from '@anansi/router';
3
-
4
- import type { ResolveProps } from './types';
5
-
6
- type NeededProps = ResolveProps;
1
+ import type { ClientSpout } from './types';
7
2
 
8
3
  export default function JSONSpout({
9
4
  id = 'anansi-json',
10
- }: { id?: string } = {}) {
11
- return function <T extends NeededProps>(
12
- next: (initData: Record<string, unknown>) => Promise<T>,
13
- ) {
14
- return async () => {
15
- const initData = getDatafromDOM(id);
16
- const nextProps = await next(initData);
17
-
18
- return nextProps;
19
- };
5
+ }: { id?: string } = {}): ClientSpout<
6
+ Record<string, unknown>,
7
+ { initData: Record<string, unknown> }
8
+ > {
9
+ return next => async props => {
10
+ const initData = getDatafromDOM(id);
11
+ return { ...(await next({ ...props, initData })), initData };
20
12
  };
21
13
  }
22
14
  function getDatafromDOM(id: string): Record<string, unknown> {
@@ -7,14 +7,18 @@ type NeededProps<RouteWith> = {
7
7
  } & ResolveProps;
8
8
 
9
9
  export default function prefetchSpout<F extends string>(field: F) {
10
- return function <RouteWith, T extends NeededProps<RouteWith>>(
11
- next: (props: ServerProps) => Promise<
10
+ return function <
11
+ RouteWith,
12
+ N extends NeededProps<RouteWith>,
13
+ I extends ServerProps,
14
+ >(
15
+ next: (props: I) => Promise<
12
16
  {
13
17
  [K in F]: RouteWith;
14
- } & T
18
+ } & N
15
19
  >,
16
20
  ) {
17
- return async (props: ServerProps) => {
21
+ return async (props: I) => {
18
22
  const nextProps = await next(props);
19
23
 
20
24
  try {