Niedzielski has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/388275 )
Change subject: Chore: upgrade dependencies
......................................................................
Chore: upgrade dependencies
• typescript v2.5.3 → 2.6.1
• Strict function types (enabled by default with strict mode).
• Weird. Classes and interfaces specifying optional types now require that
subtypes also specify these be optional. In other words, they can't be
more specific? This has to led to FUNKINESS. Check out preact-utils and
the about page. about#componentDidMount now must be optional(!) and
about#render must specify `null` as a possible return value.
• That alarming type concern in router#respond is now an error (fixed)!
• Suppress errors in .ts files using '// @ts-ignore' comments. Finally!
https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#typescript-26
• eslint-config-prettier v2.6.0 → 2.7.0
https://github.com/prettier/eslint-config-prettier/blob/cff31a2/CHANGELOG.md#version-270-2017-11-01
• webpack-dev-server v2.9.3 → 2.9.4
https://github.com/webpack/webpack-dev-server/releases/tag/v2.9.4
• sinon v4.0.2 → 4.1.0
https://github.com/sinonjs/sinon/blob/c0a71c6/docs/changelog.md#410--2017-11-02
Change-Id: If3d01d0dffeaa03b1bc20c3876224a5cd81d3889
---
M package-lock.json
M package.json
M src/common/components/preact-utils.ts
M src/common/http/page-http-client.ts
M src/common/http/page-summary-http-client.ts
M src/common/marshallers/page-summary/page-summary-unmarshaller.ts
M src/common/pages/about.tsx
M src/common/routers/route.ts
M src/common/routers/router.ts
9 files changed, 62 insertions(+), 40 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/75/388275/1
diff --git a/package-lock.json b/package-lock.json
index d31efd9..8ff2cdd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1909,9 +1909,9 @@
"dev": true
},
"eslint-config-prettier": {
- "version": "2.6.0",
- "resolved":
"https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.6.0.tgz",
- "integrity": "sha1-8h2w67Q4rWePuYlGCXxLsZi+/Mw=",
+ "version": "2.7.0",
+ "resolved":
"https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.7.0.tgz",
+ "integrity": "sha1-e7/vZq14MneDb06lVuaLm8ydpNA=",
"dev": true,
"requires": {
"get-stdin": "5.0.1"
@@ -3422,6 +3422,12 @@
"version": "1.1.27",
"resolved":
"https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz",
"integrity":
"sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==",
+ "dev": true
+ },
+ "killable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz",
+ "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=",
"dev": true
},
"kind-of": {
@@ -6207,9 +6213,9 @@
"dev": true
},
"sinon": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.2.tgz",
- "integrity":
"sha512-4mUsjHfjrHyPFGDTtNJl0q8cv4VOJGvQykI1r3fnn05ys0sQL9M1Y+DyyGNWLD2PMcoyqjJ/nFDm4K54V1eQOg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.0.tgz",
+ "integrity":
"sha512-M4o7PuK+svU4YJtEY87f8UY9VZzEgLCRheZf70Hwt9jjxdQxFVujbN1O6shXPZxlcar6OfyE54RZPj58dVba2Q==",
"dev": true,
"requires": {
"diff": "3.2.0",
@@ -6268,7 +6274,7 @@
"faye-websocket": "0.11.1",
"inherits": "2.0.3",
"json3": "3.3.2",
- "url-parse": "1.1.9"
+ "url-parse": "1.2.0"
},
"dependencies": {
"faye-websocket": {
@@ -6876,9 +6882,9 @@
"dev": true
},
"typescript": {
- "version": "2.5.3",
- "resolved":
"https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz",
- "integrity":
"sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==",
+ "version": "2.6.1",
+ "resolved":
"https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz",
+ "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=",
"dev": true
},
"typescript-eslint-parser": {
@@ -7005,9 +7011,9 @@
}
},
"url-parse": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz",
- "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
+ "integrity":
"sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==",
"dev": true,
"requires": {
"querystringify": "1.0.0",
@@ -7206,9 +7212,9 @@
}
},
"webpack-dev-server": {
- "version": "2.9.3",
- "resolved":
"https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.3.tgz",
- "integrity":
"sha512-bwq7sj452FRH+oVfgOA8xXKkLYPTNsYB4dQ0Jhz3ydjNJ9MvhpGJtehFW8Z0cEcwNkRRiF4aYbReiSGQ4pbS1w==",
+ "version": "2.9.4",
+ "resolved":
"https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz",
+ "integrity":
"sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
@@ -7225,6 +7231,7 @@
"import-local": "0.1.1",
"internal-ip": "1.2.0",
"ip": "1.1.5",
+ "killable": "1.0.0",
"loglevel": "1.5.1",
"opn": "5.1.0",
"portfinder": "1.0.13",
diff --git a/package.json b/package.json
index 7a4f141..01b3c90 100644
--- a/package.json
+++ b/package.json
@@ -67,7 +67,7 @@
"css-loader": "0.28.7",
"eslint": "4.10.0",
"eslint-config-node-services": "2.2.3",
- "eslint-config-prettier": "2.6.0",
+ "eslint-config-prettier": "2.7.0",
"eslint-config-wikimedia": "0.5.0",
"eslint-plugin-import": "2.8.0",
"eslint-plugin-jsdoc": "3.1.3",
@@ -81,16 +81,16 @@
"nodemon": "1.12.1",
"npm-run-all": "4.1.1",
"prettier": "1.7.4",
- "sinon": "4.0.2",
+ "sinon": "4.1.0",
"style-loader": "0.19.0",
"svg-inline-loader": "0.8.0",
"touch": "3.1.0",
"ts-loader": "3.1.1",
"ts-node": "3.3.0",
- "typescript": "2.5.3",
+ "typescript": "2.6.1",
"typescript-eslint-parser": "8.0.1",
"webpack": "3.8.1",
- "webpack-dev-server": "2.9.3",
+ "webpack-dev-server": "2.9.4",
"wikimedia-ui-base": "0.9.2"
}
}
diff --git a/src/common/components/preact-utils.ts
b/src/common/components/preact-utils.ts
index 22a43d1..309c2b6 100644
--- a/src/common/components/preact-utils.ts
+++ b/src/common/components/preact-utils.ts
@@ -1,9 +1,29 @@
-import "preact";
+import {
+ ComponentProps,
+ ComponentConstructor,
+ FunctionalComponent as PreactFunctionalComponent
+} from "preact";
// todo: delete pending https://github.com/developit/preact/pull/869.
export type ComponentChild = JSX.Element | string;
export type ComponentChildren = ComponentChild[];
+// Identical to PreactFunctionalComponent but props are required for
+// TypeScript strictFunctionTypes.
+interface FunctionalComponentWithProps<Props> {
+ (props: Props & ComponentProps<this>, context?: any): JSX.Element;
+ displayName?: string;
+ defaultProps?: any;
+}
+
+export type FunctionalComponent<Props> =
+ | PreactFunctionalComponent<Props>
+ | FunctionalComponentWithProps<Props>;
+
+export type AnyComponent<PropsType, StateType> =
+ | FunctionalComponent<PropsType>
+ | ComponentConstructor<PropsType, StateType>;
+
export interface ChildrenProps {
children?: ComponentChildren;
}
diff --git a/src/common/http/page-http-client.ts
b/src/common/http/page-http-client.ts
index 48235e7..9f744d4 100644
--- a/src/common/http/page-http-client.ts
+++ b/src/common/http/page-http-client.ts
@@ -35,8 +35,8 @@
)}${revisionPath}${redirectParam}`;
}
-const PAGE_HEADERS = { accept: RESTBase.PageSections.ACCEPT_HEADER };
-const RANDOM_HEADERS = { accept: RESTBase.Random.ACCEPT_HEADER };
+const PAGE_HEADERS = [["accept", RESTBase.PageSections.ACCEPT_HEADER]];
+const RANDOM_HEADERS = [["accept", RESTBase.Random.ACCEPT_HEADER]];
interface UnmarshalParams {
url: string;
diff --git a/src/common/http/page-summary-http-client.ts
b/src/common/http/page-summary-http-client.ts
index f64f798..a84dfa6 100644
--- a/src/common/http/page-summary-http-client.ts
+++ b/src/common/http/page-summary-http-client.ts
@@ -28,13 +28,8 @@
)}${redirectParam}`;
};
-const PAGE_HEADERS = {
- accept: RESTBase.PageSummary.ACCEPT_HEADER
-};
-
-const RANDOM_HEADERS = {
- accept: RESTBase.Random.ACCEPT_HEADER
-};
+const PAGE_HEADERS = [["accept", RESTBase.PageSummary.ACCEPT_HEADER]];
+const RANDOM_HEADERS = [["accept", RESTBase.Random.ACCEPT_HEADER]];
// todo: this can actually return an empty response when redirect is false. Do
// we want to support it? Same question for the other redirect usages.
diff --git a/src/common/marshallers/page-summary/page-summary-unmarshaller.ts
b/src/common/marshallers/page-summary/page-summary-unmarshaller.ts
index 441a1d1..f2dcbbf 100644
--- a/src/common/marshallers/page-summary/page-summary-unmarshaller.ts
+++ b/src/common/marshallers/page-summary/page-summary-unmarshaller.ts
@@ -64,7 +64,7 @@
const paragraphs = Array.from(element.querySelectorAll("p"));
return paragraphs.length
- ? paragraphs.map((paragraph: HTMLParagraphElement) => paragraph.outerHTML)
+ ? paragraphs.map(paragraph => (paragraph as
HTMLParagraphElement).outerHTML)
: [extractHTML];
};
diff --git a/src/common/pages/about.tsx b/src/common/pages/about.tsx
index a906239..fd56c61 100644
--- a/src/common/pages/about.tsx
+++ b/src/common/pages/about.tsx
@@ -13,12 +13,9 @@
}
export class Component extends PreactComponent<undefined, State> {
- constructor() {
- super();
- this.state = { subtitle: "" };
- }
+ state: State = { subtitle: "" };
- componentDidMount() {
+ componentDidMount?() {
// todo: figure out a common way across entry points for defining
// configuration variables that common code could consume. The server has
// server specific vars in config.ts and this here for example are used
only
@@ -36,7 +33,7 @@
this.setState({ subtitle });
}
- render(_props: void, { subtitle }: State): JSX.Element {
+ render(_props: undefined, { subtitle }: State): JSX.Element | null {
const links = [
{
href: "https://phabricator.wikimedia.org/tag/marvin/",
diff --git a/src/common/routers/route.ts b/src/common/routers/route.ts
index 13dc2e0..9653621 100644
--- a/src/common/routers/route.ts
+++ b/src/common/routers/route.ts
@@ -1,5 +1,5 @@
import * as pathToRegExp from "path-to-regexp";
-import { AnyComponent } from "preact";
+import { AnyComponent } from "../components/preact-utils";
import HttpResponse from "../http/http-response";
/**
diff --git a/src/common/routers/router.ts b/src/common/routers/router.ts
index 78734f3..279f5bd 100644
--- a/src/common/routers/router.ts
+++ b/src/common/routers/router.ts
@@ -32,11 +32,14 @@
params: Params
): Promise<RouteResponse<Props>> {
return route.importModule().then((module: PageModule<Params, Props>) =>
- getInitialProps(module, params).then((response: HttpResponse<Props>) => ({
+ getInitialProps(
+ module,
+ params
+ ).then((response: HttpResponse<Props> | void) => ({
chunkName: route.chunkName,
status: (response && response.status) || module.status || 200,
Component: module.Component as AnyComponent<Props, any>,
- props: response && response.data
+ props: (response && response.data) as Props
}))
);
}
--
To view, visit https://gerrit.wikimedia.org/r/388275
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If3d01d0dffeaa03b1bc20c3876224a5cd81d3889
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