Niedzielski has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/395810 )
Change subject: Chore: rename PageResolver
......................................................................
Chore: rename PageResolver
• Rename PageResolver from verb to noun, RequestPageModule.
• Use request / response instead of get or import to indicate that a
module is requested, the request may fail, and the implementation may
not be via import. Use page instead of name to match Route.page()
naming.
• Move RequestPageModule to the top of the file since the type is used
quite near the top.
• Add typing to requestPageModuleChunk since it otherwise returns a
Promise<any> and it's also top-level (although not exported).
Change-Id: I6983d1610fc7bf1744770e205aa74370e0288100
---
M docs/development.md
M src/common/router/router.test.ts
M src/common/router/router.ts
3 files changed, 20 insertions(+), 16 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/10/395810/1
diff --git a/docs/development.md b/docs/development.md
index 3a4863f..9bba644 100644
--- a/docs/development.md
+++ b/docs/development.md
@@ -176,6 +176,8 @@
- Static constants should be written in `SHOUTING_SNAKE_CASE`. All other
variables should be written in `camelCase`.
- Preact components should be written in PascalCase.
+- Functions should be verbs like `request` or `get`, not `requester` or
+ `getter`.
### CSS
diff --git a/src/common/router/router.test.ts b/src/common/router/router.test.ts
index 58a1f1e..b301a69 100644
--- a/src/common/router/router.test.ts
+++ b/src/common/router/router.test.ts
@@ -39,7 +39,7 @@
// eslint-disable-next-line max-len
it("throws redirect errors up for handling on the server/client
environment", done => {
// Page module that throws a redirect
- const page: PageModule<undefined, undefined> = {
+ const module: PageModule<undefined, undefined> = {
default: {
getInitialProps() {
// Trick TS and eslint for tests
@@ -50,9 +50,9 @@
}
};
- const getPage = (name: string) =>
- name === "redirect"
- ? Promise.resolve(page)
+ const requestPageModule = (page: string) =>
+ page === "redirect"
+ ? Promise.resolve(module)
: Promise.reject(new Error("No page found"));
const routes = [
@@ -62,7 +62,7 @@
})
];
- newRouter(routes, getPage)
+ newRouter(routes, requestPageModule)
.route("/redirect")
.catch(err => {
assert.ok(
diff --git a/src/common/router/router.ts b/src/common/router/router.ts
index c4b8f45..f208e5b 100644
--- a/src/common/router/router.ts
+++ b/src/common/router/router.ts
@@ -18,6 +18,10 @@
props: Props;
}
+interface RequestPageModule {
+ (name: string): Promise<PageModule<any, any>>;
+}
+
function getInitialProps<Params, Props>(
module: PageComponent<Params, Props>,
params: Params
@@ -29,18 +33,20 @@
/**
* Imports a page module from common/pages/* and names the chunk pages/* so
that
- * the router can tell the server the name of the chunks to preload
+ * the router can tell the server the name of the chunks to preload.
+ * @param {string} page The page chunk basename with no extension. Corresponds
+ * to Route.page.
*/
-function getChunk(name: string) {
- return import(/* webpackChunkName: "pages/[request]" */ `../pages/${name}`);
+function requestPageModuleChunk(page: string): Promise<PageModule<any, any>> {
+ return import(/* webpackChunkName: "pages/[request]" */ `../pages/${page}`);
}
function respond<Params, Props>(
- getPage: PageResolver,
+ requestPageModule: RequestPageModule,
route: Route<Params>,
params: Params
): Promise<RouteResponse<Props>> {
- return getPage(route.page).then(module =>
+ return requestPageModule(route.page).then(module =>
getInitialProps(
module.default,
params
@@ -67,20 +73,16 @@
};
}
-interface PageResolver {
- (name: string): Promise<PageModule<any, any>>;
-}
-
export const newRouter = (
routes: AnyRoute[],
- getPage: PageResolver = getChunk
+ requestPageModule: RequestPageModule = requestPageModuleChunk
) => {
return {
route(path: string): Promise<RouteResponse<any>> {
for (const route of routes) {
const params = route.toParams(path);
if (params) {
- return respond(getPage, route, params).catch(respondError);
+ return respond(requestPageModule, route, params).catch(respondError);
}
}
return Promise.resolve({
--
To view, visit https://gerrit.wikimedia.org/r/395810
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6983d1610fc7bf1744770e205aa74370e0288100
Gerrit-PatchSet: 1
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits