@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.
- package/CHANGELOG.md +37 -0
- package/README.md +18 -7
- package/dist/client.js +53 -47
- package/dist/client.js.map +1 -1
- package/dist/server.js +145 -136
- package/dist/server.js.map +1 -1
- package/lib/floodSpouts.d.ts +1 -1
- package/lib/floodSpouts.d.ts.map +1 -1
- package/lib/floodSpouts.js +2 -2
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -2
- package/lib/index.server.d.ts +3 -0
- package/lib/index.server.d.ts.map +1 -1
- package/lib/index.server.js +6 -2
- package/lib/spouts/app.d.ts +5 -0
- package/lib/spouts/app.d.ts.map +1 -0
- package/lib/spouts/app.js +12 -0
- package/lib/spouts/app.server.d.ts +6 -0
- package/lib/spouts/app.server.d.ts.map +1 -0
- package/lib/spouts/app.server.js +12 -0
- package/lib/spouts/document.d.ts +2 -8
- package/lib/spouts/document.d.ts.map +1 -1
- package/lib/spouts/document.js +4 -6
- package/lib/spouts/document.server.d.ts +4 -6
- package/lib/spouts/document.server.d.ts.map +1 -1
- package/lib/spouts/document.server.js +40 -42
- package/lib/spouts/json.d.ts +4 -2
- package/lib/spouts/json.d.ts.map +1 -1
- package/lib/spouts/json.js +7 -6
- package/lib/spouts/json.server.d.ts +4 -6
- package/lib/spouts/json.server.d.ts.map +1 -1
- package/lib/spouts/json.server.js +32 -34
- package/lib/spouts/prefetch.server.d.ts +1 -1
- package/lib/spouts/prefetch.server.d.ts.map +1 -1
- package/lib/spouts/prefetch.server.js +1 -1
- package/lib/spouts/restHooks.d.ts +3 -3
- package/lib/spouts/restHooks.d.ts.map +1 -1
- package/lib/spouts/restHooks.js +9 -11
- package/lib/spouts/restHooks.server.d.ts +8 -45
- package/lib/spouts/restHooks.server.d.ts.map +1 -1
- package/lib/spouts/restHooks.server.js +15 -12
- package/lib/spouts/router.d.ts +3 -4
- package/lib/spouts/router.d.ts.map +1 -1
- package/lib/spouts/router.js +14 -13
- package/lib/spouts/router.server.d.ts +3 -4
- package/lib/spouts/router.server.d.ts.map +1 -1
- package/lib/spouts/router.server.js +17 -15
- package/lib/spouts/types.d.ts +2 -0
- package/lib/spouts/types.d.ts.map +1 -1
- package/lib/spouts/types.js +1 -1
- package/package.json +11 -7
- package/src/floodSpouts.tsx +2 -2
- package/src/index.server.ts +3 -0
- package/src/index.ts +3 -0
- package/src/spouts/app.server.tsx +8 -0
- package/src/spouts/app.tsx +6 -0
- package/src/spouts/document.server.tsx +64 -68
- package/src/spouts/document.tsx +5 -14
- package/src/spouts/json.server.tsx +41 -45
- package/src/spouts/json.tsx +8 -16
- package/src/spouts/prefetch.server.tsx +8 -4
- package/src/spouts/restHooks.server.tsx +27 -22
- package/src/spouts/restHooks.tsx +12 -18
- package/src/spouts/router.server.tsx +27 -21
- package/src/spouts/router.tsx +19 -19
- 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,
|
|
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"}
|
package/lib/spouts/router.js
CHANGED
|
@@ -25,19 +25,20 @@ function routerSpout(options) {
|
|
|
25
25
|
}, void 0, children);
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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,
|
|
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 {
|
|
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
|
-
}): <
|
|
8
|
-
matchedRoutes: Route<ResolveWith
|
|
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,
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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,
|
|
46
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb3V0ZXJTcG91dCIsIm9wdGlvbnMiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsImNoaWxkcmVuIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsIm5leHQiLCJwcm9wcyIsInVybCIsInJlcSIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJpbml0aWFsRW50cmllcyIsIm1hdGNoZWRSb3V0ZXMiLCJnZXRNYXRjaGVkUm91dGVzIiwibmV4dFByb3BzIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZSwgUm91dGVQcm92aWRlciwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVSb3V0ZXIsIFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJvdXRlclNwb3V0PFJlc29sdmVXaXRoPihvcHRpb25zOiB7XG4gIHJlc29sdmVXaXRoPzogYW55O1xuICB1c2VSZXNvbHZlV2l0aDogKCkgPT4gUmVzb2x2ZVdpdGg7XG4gIGNyZWF0ZVJvdXRlcjogQ3JlYXRlUm91dGVyPFJlc29sdmVXaXRoPjtcbn0pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHtcbiAgICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXTtcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj47XG4gIH1cbj4ge1xuICBjb25zdCBjcmVhdGVSb3V0ZUNvbXBvbmVudCA9IChcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj4sXG4gICkgPT5cbiAgICBmdW5jdGlvbiBSb3V0ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgICAgY29uc3QgcmVzb2x2ZVdpdGggPSBvcHRpb25zLnVzZVJlc29sdmVXaXRoKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb3V0ZVByb3ZpZGVyIHJvdXRlcj17cm91dGVyfSByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB1cmwgPSBwcm9wcy5yZXEudXJsIHx8ICcnO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFJZSxTQUFTQSxXQUFULENBQWtDQyxPQUFsQyxFQVViO0VBQ0EsTUFBTUMsb0JBQW9CLEdBQ3hCQyxNQUQyQixJQUczQixTQUFTQyxNQUFULENBQWdCO0lBQUVDO0VBQUYsQ0FBaEIsRUFBNkQ7SUFDM0QsTUFBTUMsV0FBVyxHQUFHTCxPQUFPLENBQUNNLGNBQVIsRUFBcEI7SUFFQSxvQkFDRSxtQkFBQyxxQkFBRDtNQUFlLE1BQU0sRUFBRUosTUFBdkI7TUFBK0IsV0FBVyxFQUFFRztJQUE1QyxXQUNHRCxRQURILENBREY7RUFLRCxDQVhIOztFQWFBLE9BQU9HLElBQUksSUFBSSxNQUFNQyxLQUFOLElBQWU7SUFDNUIsTUFBTUMsR0FBRyxHQUFHRCxLQUFLLENBQUNFLEdBQU4sQ0FBVUQsR0FBVixJQUFpQixFQUE3QjtJQUNBLE1BQU1QLE1BQU0sR0FBR0YsT0FBTyxDQUFDVyxZQUFSLENBQ2IsSUFBQUMsNEJBQUEsRUFBb0I7TUFBRUMsY0FBYyxFQUFFLENBQUNKLEdBQUQ7SUFBbEIsQ0FBcEIsQ0FEYSxDQUFmO0lBR0EsTUFBTUssYUFBbUMsR0FBR1osTUFBTSxDQUFDYSxnQkFBUCxDQUF3Qk4sR0FBeEIsQ0FBNUM7SUFFQSxNQUFNTyxTQUFTLEdBQUcsTUFBTVQsSUFBSSxDQUFDLEVBQzNCLEdBQUdDLEtBRHdCO01BRTNCTSxhQUYyQjtNQUczQlo7SUFIMkIsQ0FBRCxDQUE1QjtJQU1BLE1BQU1DLE1BQU0sR0FBR0Ysb0JBQW9CLENBQUNDLE1BQUQsQ0FBbkM7SUFFQSxPQUFPLEVBQ0wsR0FBR2MsU0FERTtNQUVMQyxHQUFHLGVBQUUsbUJBQUMsTUFBRCxjQUFTRCxTQUFTLENBQUNDLEdBQW5CLENBRkE7TUFHTDtNQUNBSCxhQUpLO01BS0xaO0lBTEssQ0FBUDtFQU9ELENBdEJEO0FBdUJEIn0=
|
package/lib/spouts/types.d.ts
CHANGED
|
@@ -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"}
|
package/lib/spouts/types.js
CHANGED
|
@@ -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+
|
|
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.
|
|
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.
|
|
68
|
+
"@anansi/babel-preset": "^3.2.7",
|
|
69
69
|
"@anansi/browserslist-config": "1.3.3",
|
|
70
|
-
"@anansi/webpack-config": "^11.6.
|
|
71
|
-
"@babel/cli": "7.
|
|
72
|
-
"@babel/core": "7.18.
|
|
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.
|
|
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.
|
|
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": {
|
package/src/floodSpouts.tsx
CHANGED
|
@@ -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
|
}
|
package/src/index.server.ts
CHANGED
|
@@ -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';
|
|
@@ -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 {
|
|
5
|
+
import type { ServerSpout } from './types';
|
|
6
6
|
import type { Policy } from './csp';
|
|
7
7
|
import Document from './DocumentComponent';
|
|
8
8
|
|
|
9
|
-
type
|
|
9
|
+
type NeededNext = {
|
|
10
10
|
matchedRoutes: Route<any>[];
|
|
11
11
|
title?: string;
|
|
12
12
|
scripts?: React.ReactNode[];
|
|
13
|
-
}
|
|
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
|
|
23
|
-
next
|
|
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
|
-
|
|
25
|
+
const publicPath = props.clientManifest.publicPath;
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
}
|
package/src/spouts/document.tsx
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Route } from '@anansi/router';
|
|
3
3
|
|
|
4
|
-
import type {
|
|
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
|
|
16
|
-
|
|
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
|
-
|
|
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 {
|
|
6
|
-
import type { Policy } from './csp';
|
|
7
|
-
import Document from './DocumentComponent';
|
|
3
|
+
import type { ServerSpout } from './types';
|
|
8
4
|
|
|
9
|
-
type
|
|
5
|
+
type NeededNext = {
|
|
10
6
|
initData?: Record<string, () => unknown>;
|
|
11
7
|
scripts?: React.ReactNode[];
|
|
12
|
-
}
|
|
8
|
+
};
|
|
13
9
|
|
|
14
10
|
export default function JSONSpout({
|
|
15
11
|
id = 'anansi-json',
|
|
16
|
-
}: { id?: string } = {})
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
};
|
|
68
|
+
return {
|
|
69
|
+
...nextProps,
|
|
70
|
+
scripts,
|
|
75
71
|
};
|
|
76
72
|
};
|
|
77
73
|
}
|
package/src/spouts/json.tsx
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
import
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 <
|
|
11
|
-
|
|
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
|
-
} &
|
|
18
|
+
} & N
|
|
15
19
|
>,
|
|
16
20
|
) {
|
|
17
|
-
return async (props:
|
|
21
|
+
return async (props: I) => {
|
|
18
22
|
const nextProps = await next(props);
|
|
19
23
|
|
|
20
24
|
try {
|