From 033066520482c61b3719569df007dda4446320dd Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Wed, 2 Nov 2016 14:04:31 +0100 Subject: [PATCH 01/65] Added feature matrix --- feature-matrix.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 feature-matrix.md diff --git a/feature-matrix.md b/feature-matrix.md new file mode 100644 index 000000000..ad8d974f0 --- /dev/null +++ b/feature-matrix.md @@ -0,0 +1,67 @@ +The original create-react-app does not have all the feature we want. + +The features we want come from different sources. + +Sources: + +* PunchCardJS (npm scripts) +* Molviewer (jspm) +* angular-cli +* create-ts-app +* any yeoman or other generator/startkit + +Features: + +* Clutter-free +* Transpile from Typescript to Javascript +* Transpile tsx to Javascript +* Target ES6 and evergreen browsers (Chrome/Firefox/Edge), transpile/polyfill functionality not available in those browsers +* Reload browser when code changes +* Rebuild when code changes, so page can be reloaded in browser manually +* Fast rebuilds, using for eg. incremental builds or hot reload +* Typescript2 (@types instead of typings) +* Original source code in browser using source maps +* Minify of js +* Minify of css +* Bundle (aka concatenate) of js +* Bundle css +* Testing + + * Unit + * Against dom + * End2End testing, eg. testling-ci, saucelabs, protractor or selenium + + * Test across Browser/Version/OS/Devices matrix + + * Coverage of original code + * Report coverage of untested code + * Error stacktraces of original code + * Written in Typescript + * Advanced assertions eg. chai + * Mocking ability eg. sinon + * Must have it() and describe() or equivalent + * Command to run tests + * Run tests when source code changes (watcher) + +* Minimize duplication, eg. installing library should not take many steps +* Linting + + * In editor by installing a editor plugin + * Before release + * Lint Typescript using tslint + * Lint Typescript using eslint + * No conflicts between linters + * Lint css + * Lint tsx + * Has editor config + +* Linting, testing, building must be runnable on Continous Intergration platform like Travis-CI +* Purge command, to clear build, test results and dependencies +* Deploy to Github Pages command +* Generate API documentation command + + * Include documentation for private members + +* Include Typescript declaration of js package which is not available as @type/... +* Opening repo in editor should just work +* Environment flag (production/development) which can be used in code -- GitLab From a85fa3a6f069e6486db3628f8c853ad1f53b08d6 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Wed, 2 Nov 2016 14:40:48 +0100 Subject: [PATCH 02/65] More features wanted --- feature-matrix.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index ad8d974f0..2efcc3fc2 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -13,8 +13,13 @@ Sources: Features: * Clutter-free + + * Not too many commands + * Not too many config files + * Transpile from Typescript to Javascript * Transpile tsx to Javascript +* Uses npm for application dependencies (not bower, jspm) * Target ES6 and evergreen browsers (Chrome/Firefox/Edge), transpile/polyfill functionality not available in those browsers * Reload browser when code changes * Rebuild when code changes, so page can be reloaded in browser manually @@ -46,14 +51,16 @@ Features: * Minimize duplication, eg. installing library should not take many steps * Linting - * In editor by installing a editor plugin - * Before release + * In editor by installing a editor plugin + * Document how to prep editor for linting + * Before build or commit or release perform lint * Lint Typescript using tslint * Lint Typescript using eslint * No conflicts between linters * Lint css * Lint tsx * Has editor config + * Lint errors should prevent next step from running (ie build should fail) * Linting, testing, building must be runnable on Continous Intergration platform like Travis-CI * Purge command, to clear build, test results and dependencies @@ -65,3 +72,13 @@ Features: * Include Typescript declaration of js package which is not available as @type/... * Opening repo in editor should just work * Environment flag (production/development) which can be used in code +* Proxy To Backend +* Offline +* Doucment how to install dependencies +* Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch +* use of ES7 + + * object spread, very nice for redux + * decorator, nice to have for mobx + * generator, nice for redux-saga + -- GitLab From f64ce9e68662c3e6ddbcdc574bc139a15c5a462e Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Wed, 2 Nov 2016 14:47:17 +0100 Subject: [PATCH 03/65] Add upstream as source --- feature-matrix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/feature-matrix.md b/feature-matrix.md index 2efcc3fc2..81ac8d58f 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -4,6 +4,7 @@ The features we want come from different sources. Sources: +* facebookincubator/create-react-app * PunchCardJS (npm scripts) * Molviewer (jspm) * angular-cli -- GitLab From a2e90e6dba0f0cb9e458b5e887669556ea80dc6e Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 2 Nov 2016 16:09:55 +0100 Subject: [PATCH 04/65] almost done with the feature matrix --- feature-matrix.md | 377 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 310 insertions(+), 67 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 81ac8d58f..f36dbe8d0 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -1,74 +1,46 @@ -The original create-react-app does not have all the feature we want. -The features we want come from different sources. +**testing** -Sources: +|feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | +|---|---|---|---|---|---|---|---| +| unit testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| dom testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| e2e testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing across browsers/OS/devices | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage includes untouched code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tests written in TS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``it()`` and ``describe()`` or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has command to run tests | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| run tests on source change | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -* facebookincubator/create-react-app -* PunchCardJS (npm scripts) -* Molviewer (jspm) -* angular-cli -* create-ts-app -* any yeoman or other generator/startkit -Features: -* Clutter-free - - * Not too many commands - * Not too many config files +**linting** -* Transpile from Typescript to Javascript -* Transpile tsx to Javascript -* Uses npm for application dependencies (not bower, jspm) -* Target ES6 and evergreen browsers (Chrome/Firefox/Edge), transpile/polyfill functionality not available in those browsers -* Reload browser when code changes -* Rebuild when code changes, so page can be reloaded in browser manually -* Fast rebuilds, using for eg. incremental builds or hot reload -* Typescript2 (@types instead of typings) -* Original source code in browser using source maps -* Minify of js -* Minify of css -* Bundle (aka concatenate) of js -* Bundle css -* Testing +|feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | +|---|---|---|---|---|---|---|---| +| by editor plugin | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| prebuild linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| precommit linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| prerelease linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint the TS src | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| eslint the TS src | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| no-conflicts linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| lint css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linter tsx aware | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has .editorconfig | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| lint errors are terminal | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | - * Unit - * Against dom - * End2End testing, eg. testling-ci, saucelabs, protractor or selenium - - * Test across Browser/Version/OS/Devices matrix - - * Coverage of original code - * Report coverage of untested code - * Error stacktraces of original code - * Written in Typescript - * Advanced assertions eg. chai - * Mocking ability eg. sinon - * Must have it() and describe() or equivalent - * Command to run tests - * Run tests when source code changes (watcher) -* Minimize duplication, eg. installing library should not take many steps -* Linting - * In editor by installing a editor plugin - * Document how to prep editor for linting - * Before build or commit or release perform lint - * Lint Typescript using tslint - * Lint Typescript using eslint - * No conflicts between linters - * Lint css - * Lint tsx - * Has editor config - * Lint errors should prevent next step from running (ie build should fail) - -* Linting, testing, building must be runnable on Continous Intergration platform like Travis-CI -* Purge command, to clear build, test results and dependencies -* Deploy to Github Pages command -* Generate API documentation command - - * Include documentation for private members +* Clutter-free + * Not too many commands + * Not too many config files +* Minimize duplication, eg. installing library should not take many steps * Include Typescript declaration of js package which is not available as @type/... * Opening repo in editor should just work @@ -77,9 +49,280 @@ Features: * Offline * Doucment how to install dependencies * Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch -* use of ES7 - * object spread, very nice for redux - * decorator, nice to have for mobx - * generator, nice for redux-saga - +**other** + +|feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | +|---|---|---|---|---|---|---|---| +| transpile from TS to JS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile TSX to JS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``gulp`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``grunt`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``bower`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``jspm`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| uses ``npm`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets es6 | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest chrome | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest firefox | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic reload browser on code change | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic rebuild on code changes, manual browser reload | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| fast rebuilds | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle TS2 ``@types/`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| in-browser debugging of original source code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of js | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of js | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linting can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| building can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can have ``purge`` command: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can have deploy to gh-pages command | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can have generate api docs command | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 object spread | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 decorators | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 generator | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | + + -- GitLab From 2b045c2f7479f3cb5faf0f78458f3a65fd067536 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 2 Nov 2016 16:30:30 +0100 Subject: [PATCH 05/65] done feature-matrix --- feature-matrix.md | 275 +++------------------------------------------- 1 file changed, 18 insertions(+), 257 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index f36dbe8d0..bac7459c6 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -1,5 +1,5 @@ -**testing** +# testing |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| @@ -19,7 +19,7 @@ -**linting** +# linting |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| @@ -37,20 +37,7 @@ -* Clutter-free - * Not too many commands - * Not too many config files -* Minimize duplication, eg. installing library should not take many steps - -* Include Typescript declaration of js package which is not available as @type/... -* Opening repo in editor should just work -* Environment flag (production/development) which can be used in code -* Proxy To Backend -* Offline -* Doucment how to install dependencies -* Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch - -**other** +# general |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| @@ -83,246 +70,20 @@ | can handle es7 object spread | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 decorators | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 generator | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can use untyped JS libs | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can differentiate prod/dev | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can access external api server | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows offline mode | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows standalone mode | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | + + +# Remaining + +* Not too many commands +* Not too many config files +* Minimize duplication, eg. installing library should not take many steps +* Opening repo in editor should just work +* Doucment how to install dependencies +* Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch -- GitLab From d7772f2d7d8f14003132d352e75b6757d71db2f1 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 2 Nov 2016 17:18:21 +0100 Subject: [PATCH 06/65] filled out features for punchcardjs and molviewer --- feature-matrix.md | 125 +++++++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 57 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index bac7459c6..8c6dd6f59 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -1,21 +1,27 @@ +# legend + +- :grey_question: : unknown +- :white_check_mark: : implemented +- :x: : not implemented + + + # testing |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| unit testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| dom testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| e2e testing | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing across browsers/OS/devices | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| coverage of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| coverage includes untouched code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| unit testing | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| dom testing | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| e2e testing | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing across browsers/OS/devices | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage of original code | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tests written in TS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has ``it()`` and ``describe()`` or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has command to run tests | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| run tests on source change | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tests written in TS | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``it()`` and ``describe()`` or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has command to run tests | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic run tests on source change | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | @@ -23,17 +29,19 @@ |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| by editor plugin | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| prebuild linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| precommit linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| prerelease linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tslint the TS src | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| eslint the TS src | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| no-conflicts linting | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| lint css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linter tsx aware | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has .editorconfig | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| lint errors are terminal | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint by editor plugin | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| csslint by editor plugin | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| jshint by editor plugin | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| prebuild linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| precommit linting | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| prerelease linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint the TS src | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| eslint the TS src | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| no conflicts between linters | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| lint css | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linter tsx aware | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has .editorconfig | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| lint errors are terminal | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | @@ -41,40 +49,41 @@ |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| transpile from TS to JS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| transpile TSX to JS | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``gulp`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``grunt`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``bower`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``jspm`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| uses ``npm`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets es6 | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest chrome | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest firefox | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile from TS to JS | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile TSX to JS | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``gulp`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``grunt`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``bower`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``jspm`` | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets es6 | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic reload browser on code change | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic rebuild on code changes, manual browser reload | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| fast rebuilds | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle TS2 ``@types/`` | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| in-browser debugging of original source code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of js | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of js | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of css | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linting can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| building can run on Travis or similar | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can have ``purge`` command: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can have deploy to gh-pages command | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can have generate api docs command | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 object spread | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 decorators | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 generator | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can use untyped JS libs | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can differentiate prod/dev | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can access external api server | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| allows offline mode | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| allows standalone mode | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic reload browser on code change | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic rebuild on code changes, manual browser reload | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| fast rebuilds | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle TS2 ``@types/`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| in-browser debugging of original source code | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of js | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of css | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of js | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of css | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linting can run on Travis or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing can run on Travis or similar | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| building can run on Travis or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``purge`` command: | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy app to gh-pages command | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy docs to gh-pages command | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has generate api docs command | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 object spread | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 decorators | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can use untyped JS libs | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can differentiate prod/dev | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can access external api server | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows offline mode | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows standalone mode | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | # Remaining @@ -85,5 +94,7 @@ * Opening repo in editor should just work * Doucment how to install dependencies * Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch +* dependency management: npm, unpkg - +| Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From fb6a60ff230f76244e487985663c5cc5a37137ec Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 2 Nov 2016 17:52:27 +0100 Subject: [PATCH 07/65] filled out features for create-react-app --- feature-matrix.md | 118 ++++++++++++++++++++++++++++------------------ 1 file changed, 71 insertions(+), 47 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 8c6dd6f59..4492a579c 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -11,17 +11,17 @@ |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| unit testing | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| dom testing | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| e2e testing | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing across browsers/OS/devices | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| coverage of original code | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| unit testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| dom testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tests written in TS | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has ``it()`` and ``describe()`` or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has command to run tests | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic run tests on source change | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tests written in TS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``it()`` and ``describe()`` or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has command to run tests | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic run tests on source change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | @@ -29,18 +29,18 @@ |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| tslint by editor plugin | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| csslint by editor plugin | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| jshint by editor plugin | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint by editor plugin | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| csslint by editor plugin | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| esjshint by editor plugin | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | prebuild linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | precommit linting | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | prerelease linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tslint the TS src | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| eslint the TS src | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| no conflicts between linters | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| lint css | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linter tsx aware | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has .editorconfig | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint the TS src | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| eslint src | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| no conflicts between linters | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| lint css | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linter tsx aware | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has .editorconfig | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | lint errors are terminal | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | @@ -49,41 +49,39 @@ |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| transpile from TS to JS | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| transpile TSX to JS | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``gulp`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``grunt`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``bower`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``jspm`` | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets es6 | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic reload browser on code change | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic rebuild on code changes, manual browser reload | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| fast rebuilds | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle TS2 ``@types/`` | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| in-browser debugging of original source code | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of js | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of css | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of js | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of css | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linting can run on Travis or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing can run on Travis or similar | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| building can run on Travis or similar | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has ``purge`` command: | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy app to gh-pages command | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy docs to gh-pages command | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has generate api docs command | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 object spread | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 decorators | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can use untyped JS libs | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can differentiate prod/dev | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can access external api server | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| allows offline mode | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| allows standalone mode | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | # Remaining @@ -98,3 +96,29 @@ | Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows offline mode | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| allows standalone mode | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | + + + + + + + + + + + + + + + + + + + + + + + + -- GitLab From d786b02ec16062f6fffa35f9b348fec64e0b944b Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Thu, 3 Nov 2016 09:45:52 +0100 Subject: [PATCH 08/65] Created fork @nlesc/react-scripts Refs #1 --- packages/react-scripts/README.md | 6 ++++++ packages/react-scripts/package.json | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/react-scripts/README.md b/packages/react-scripts/README.md index 845e546c6..b365f127a 100644 --- a/packages/react-scripts/README.md +++ b/packages/react-scripts/README.md @@ -1,5 +1,11 @@ # react-scripts +The `@nlesc/react-scripts` package can be used by: + +``` +create-react-app my-app --scripts-version @nlesc/react-scripts +``` + This package includes scripts and configuration used by [Create React App](https://github.com/facebookincubator/create-react-app). Please refer to its documentation: diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index b4cad9639..9836c6f9a 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,14 +1,14 @@ { - "name": "react-scripts", - "version": "0.7.0", - "description": "Configuration and scripts for Create React App.", - "repository": "facebookincubator/create-react-app", + "name": "@nlesc/react-scripts", + "version": "0.0.1", + "description": "Configuration and scripts for Create React App with Typescript.", + "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", "engines": { "node": ">=4" }, "bugs": { - "url": "https://github.com/facebookincubator/create-react-app/issues" + "url": "https://github.com/NLeSC/create-react-app/issues" }, "files": [ ".babelrc", -- GitLab From f795cb70fb082d5907acd12cfc4b217b45221742 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 10:05:27 +0100 Subject: [PATCH 09/65] Update feature-matrix.md --- feature-matrix.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/feature-matrix.md b/feature-matrix.md index 4492a579c..68173c4f8 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -1,6 +1,8 @@ # legend +The table records what is currently available and working, not what could work with some extra effort. Recording these facts helps to keep the discussions clean. + - :grey_question: : unknown - :white_check_mark: : implemented - :x: : not implemented -- GitLab From 2e7839dfd5d53cd5353f77b2e56550b5d9016632 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 10:06:12 +0100 Subject: [PATCH 10/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 68173c4f8..dbfd8784e 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -1,7 +1,7 @@ # legend -The table records what is currently available and working, not what could work with some extra effort. Recording these facts helps to keep the discussions clean. +The table records what is currently available and working _in the listed repo_, not what could work with some extra effort. Recording these facts helps to keep the discussions clean. - :grey_question: : unknown - :white_check_mark: : implemented -- GitLab From 2da1e9ed7547e1c143448ddd5f642f9918c4276c Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 11:00:34 +0100 Subject: [PATCH 11/65] create-react-app has object spread operator create-react-app has object spread operator apparently, https://github.com/facebookincubator/create-react-app/blame/79160b858a8496a93abbbe6254fb4008e22a6b89/README.md#L142 --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index dbfd8784e..6d5f28ab6 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -78,7 +78,7 @@ The table records what is currently available and working _in the listed repo_, | has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 object spread | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 602770004c4b3539e384fc625f6feef26cfda355 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 11:39:38 +0100 Subject: [PATCH 12/65] added autoprefixing of css as a possible feature --- feature-matrix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/feature-matrix.md b/feature-matrix.md index 6d5f28ab6..acf2cde7b 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -95,6 +95,7 @@ The table records what is currently available and working _in the listed repo_, * Doucment how to install dependencies * Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch * dependency management: npm, unpkg +* autoprefixing vendor specific css ``-webkit-box-orient`` and such | Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 7c81211268970bdd6361b861bbb1f7e426304ebb Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 11:41:14 +0100 Subject: [PATCH 13/65] added static asset management as a possible feature --- feature-matrix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/feature-matrix.md b/feature-matrix.md index acf2cde7b..d2035feae 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -96,6 +96,7 @@ The table records what is currently available and working _in the listed repo_, * Document usual suspects for routing/state/async/fetch: react-router, react-redux, redux-thunk, isomorphic-fetch * dependency management: npm, unpkg * autoprefixing vendor specific css ``-webkit-box-orient`` and such +* static asset management, including fonts, images and such | Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 73e552c81d7788e0a1b9b101ab9bbbf83fcd1caa Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 11:44:14 +0100 Subject: [PATCH 14/65] add browser caching of static assets as possible feature --- feature-matrix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/feature-matrix.md b/feature-matrix.md index d2035feae..e9dd83496 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -97,6 +97,7 @@ The table records what is currently available and working _in the listed repo_, * dependency management: npm, unpkg * autoprefixing vendor specific css ``-webkit-box-orient`` and such * static asset management, including fonts, images and such +* avoid browser caching of static assets | Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 07b937c6aaf71f4a3fe0edda7ee1d9e31a699dbb Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 13:37:32 +0100 Subject: [PATCH 15/65] re-added assertions and mocking features to the table --- feature-matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index e9dd83496..07e3f2cd7 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -24,7 +24,8 @@ The table records what is currently available and working _in the listed repo_, | has ``it()`` and ``describe()`` or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has command to run tests | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | automatic run tests on source change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | - +| Advanced assertions, e.g. Chai | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| Mocking ability, e.g. Sinon | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | # linting @@ -99,8 +100,7 @@ The table records what is currently available and working _in the listed repo_, * static asset management, including fonts, images and such * avoid browser caching of static assets -| Advanced assertions, e.g. Chai | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| Mocking ability, e.g. Sinon | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | + | allows offline mode | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | allows standalone mode | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 017a8914d9a3d30d80915fc3fa7f4916424769fa Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:53:16 +0100 Subject: [PATCH 16/65] sort order chagened --- feature-matrix.md | 76 ++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 07e3f2cd7..6091d3243 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -9,6 +9,45 @@ The table records what is currently available and working _in the listed repo_, +# general + +|feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | +|---|---|---|---|---|---|---|---| +| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | + + # testing |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | @@ -48,43 +87,6 @@ The table records what is currently available and working _in the listed repo_, -# general - -|feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | -|---|---|---|---|---|---|---|---| -| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | # Remaining -- GitLab From 3282a342f8011a442ad3a376b274c904f66065bc Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:54:13 +0100 Subject: [PATCH 17/65] Update feature-matrix.md --- feature-matrix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 6091d3243..b64e1ca59 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -13,8 +13,8 @@ The table records what is currently available and working _in the listed repo_, |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | #2 | +| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](/issues/#2) | | transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 8803a4fd6450a0b405921d89858e658327739da8 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:55:04 +0100 Subject: [PATCH 18/65] Update feature-matrix.md --- feature-matrix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index b64e1ca59..24e418950 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -13,8 +13,8 @@ The table records what is currently available and working _in the listed repo_, |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | #2 | -| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](/issues/#2) | +| transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](issues/#2) | | transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 572cd7b5a3e5e5d32a943d502d263863f22f04f3 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:55:37 +0100 Subject: [PATCH 19/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 24e418950..5fe66d030 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -14,7 +14,7 @@ The table records what is currently available and working _in the listed repo_, |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| | transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | -| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](issues/#2) | +| transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From ec2135567cb92ba521b916196e0f9a45785c3ace Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:57:29 +0100 Subject: [PATCH 20/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 5fe66d030..2662fd947 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -15,7 +15,7 @@ The table records what is currently available and working _in the listed repo_, |---|---|---|---|---|---|---|---| | transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | -| transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#5](https://github.com/NLeSC/create-react-app/issues/5) | | doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 0bf37ed76214550772426cdd3038a37eead98b94 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 14:59:25 +0100 Subject: [PATCH 21/65] Update feature-matrix.md --- feature-matrix.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 2662fd947..950ab1c18 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -16,10 +16,10 @@ The table records what is currently available and working _in the listed repo_, | transpile from TS to JS | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | transpile TSX to JS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | transpile errors are terminal | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#5](https://github.com/NLeSC/create-react-app/issues/5) | -| doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| doesn't use ``gulp`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 1932def7c62a234af8090ab533f3bf5c30a5f9f4 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:05:33 +0100 Subject: [PATCH 22/65] Update feature-matrix.md --- feature-matrix.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 950ab1c18..32a5faec4 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -20,10 +20,10 @@ The table records what is currently available and working _in the listed repo_, | doesn't use ``grunt`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | doesn't use ``bower`` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | doesn't use ``jspm`` | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | -| targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| targets es5 | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From d621385dbf6484e7f7f87b358e437b73a39ec26e Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:08:21 +0100 Subject: [PATCH 23/65] Update feature-matrix.md --- feature-matrix.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 32a5faec4..bc4223715 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -24,10 +24,10 @@ The table records what is currently available and working _in the listed repo_, | targets latest chrome | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | targets latest firefox | :grey_question: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | targets latest edge | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | -| automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| automatic reload browser on code change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From b54bffd65b35d98ea3e8b31baa0afe4c26cd7de8 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:10:54 +0100 Subject: [PATCH 24/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index bc4223715..5dc3023b3 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -28,7 +28,7 @@ The table records what is currently available and working _in the listed repo_, | automatic rebuild on code changes, manual browser reload | :white_check_mark: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | -| in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#6](https://github.com/NLeSC/create-react-app/issues/6) | | minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From be68f57123939ce3334e6b2c08afebf6feaca3c6 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:15:17 +0100 Subject: [PATCH 25/65] Update feature-matrix.md --- feature-matrix.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 5dc3023b3..3c66c0b63 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -29,10 +29,10 @@ The table records what is currently available and working _in the listed repo_, | fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#6](https://github.com/NLeSC/create-react-app/issues/6) | -| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 365e6e09e671952ce2d58bd809e7f25418cb822d Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:17:34 +0100 Subject: [PATCH 26/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 3c66c0b63..304978a69 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -29,7 +29,7 @@ The table records what is currently available and working _in the listed repo_, | fast rebuilds | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | can handle TS2 ``@types/`` | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | | in-browser debugging of original source code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#6](https://github.com/NLeSC/create-react-app/issues/6) | -| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#2](https://github.com/NLeSC/create-react-app/issues/2) | +| minification of js | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#6](https://github.com/NLeSC/create-react-app/issues/6) | | minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | -- GitLab From 86a4cc8b11549aa4c0ec23b9878cb5c6e4dba9ab Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:20:10 +0100 Subject: [PATCH 27/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 304978a69..4c0e27ccf 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -33,7 +33,7 @@ The table records what is currently available and working _in the listed repo_, | minification of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | -| linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#7](https://github.com/NLeSC/create-react-app/issues/7) | | testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From e4de29f9c38c68f3adcbc36a9dcea99bb51d67ab Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:22:50 +0100 Subject: [PATCH 28/65] Update feature-matrix.md --- feature-matrix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 4c0e27ccf..02aa288de 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -34,8 +34,8 @@ The table records what is currently available and working _in the listed repo_, | bundling of js | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | bundling of css | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#7](https://github.com/NLeSC/create-react-app/issues/7) | -| testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#8](https://github.com/NLeSC/create-react-app/issues/8) | | has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 72e0e70f292c4c814925058e794ca27a284ba9b8 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:29:43 +0100 Subject: [PATCH 29/65] Update feature-matrix.md --- feature-matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 02aa288de..474ea38ca 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -36,9 +36,9 @@ The table records what is currently available and working _in the listed repo_, | linting can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#7](https://github.com/NLeSC/create-react-app/issues/7) | | testing can run on Travis or similar | :white_check_mark: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | building can run on Travis or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#8](https://github.com/NLeSC/create-react-app/issues/8) | -| has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#9](https://github.com/NLeSC/create-react-app/issues/9) | +| has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#10](https://github.com/NLeSC/create-react-app/issues/10) | | has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 00ad5453e0715c12f14c5a38aa1dcfc4664ef7ba Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:31:59 +0100 Subject: [PATCH 30/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 474ea38ca..e131f3d1c 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -39,7 +39,7 @@ The table records what is currently available and working _in the listed repo_, | has ``purge`` command: | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#9](https://github.com/NLeSC/create-react-app/issues/9) | | has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#10](https://github.com/NLeSC/create-react-app/issues/10) | -| has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#11](https://github.com/NLeSC/create-react-app/issues/11) | | can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From ca3d0057a3e4aa621119a9a13f5db8f906e1724e Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:45:49 +0100 Subject: [PATCH 31/65] Update feature-matrix.md --- feature-matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index e131f3d1c..430ea7f48 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -40,9 +40,9 @@ The table records what is currently available and working _in the listed repo_, | has deploy app to gh-pages command | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | has deploy docs to gh-pages command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#10](https://github.com/NLeSC/create-react-app/issues/10) | | has generate api docs command | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#11](https://github.com/NLeSC/create-react-app/issues/11) | -| can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | +| can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | +| can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | | can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From cc99e6f1178abbaf55a4ec973cfeebf82afe5f25 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:48:07 +0100 Subject: [PATCH 32/65] Update feature-matrix.md --- feature-matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 430ea7f48..1421ef91f 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -43,9 +43,9 @@ The table records what is currently available and working _in the listed repo_, | can handle es7 object spread | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | | can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | | can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | -| can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#13](https://github.com/NLeSC/create-react-app/issues/13) | +| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | # testing -- GitLab From 9fe1db71a6331fc52e212de7374d68572145a5f0 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:52:33 +0100 Subject: [PATCH 33/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 1421ef91f..7047fcba8 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -44,7 +44,7 @@ The table records what is currently available and working _in the listed repo_, | can handle es7 decorators | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | | can handle es7 generator | :grey_question: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#12](https://github.com/NLeSC/create-react-app/issues/12) | | can use untyped JS libs | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#13](https://github.com/NLeSC/create-react-app/issues/13) | -| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| can differentiate prod/dev | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#14](https://github.com/NLeSC/create-react-app/issues/14) | | can access external api server | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | -- GitLab From be4555afda2d5edbf2d7832299b68bb10dccfc91 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:57:42 +0100 Subject: [PATCH 34/65] Update feature-matrix.md --- feature-matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 7047fcba8..bdb8398a8 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -52,14 +52,14 @@ The table records what is currently available and working _in the listed repo_, |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| unit testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| dom testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| unit testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | +| dom testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | | e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tests written in TS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tests written in TS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | | has ``it()`` and ``describe()`` or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | has command to run tests | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | automatic run tests on source change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From b1ed46c0c605edb502e995e35d2973cd16b4bee9 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 15:59:22 +0100 Subject: [PATCH 35/65] Update feature-matrix.md --- feature-matrix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index bdb8398a8..55c3f7d50 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -54,8 +54,8 @@ The table records what is currently available and working _in the listed repo_, |---|---|---|---|---|---|---|---| | unit testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | | dom testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | -| e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | +| testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | | coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -- GitLab From 3cd5911d690040d2efa7e5f8efe54210e1757a55 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 16:06:57 +0100 Subject: [PATCH 36/65] Update feature-matrix.md --- feature-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-matrix.md b/feature-matrix.md index 55c3f7d50..b0678ce9c 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -56,7 +56,7 @@ The table records what is currently available and working _in the listed repo_, | dom testing | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | | e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | | testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | -| coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#17](https://github.com/NLeSC/create-react-app/issues/17) | | coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | tests written in TS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | -- GitLab From f3b1c1fb8625f3d46115a7b57611936c67726f44 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 16:10:51 +0100 Subject: [PATCH 37/65] Update feature-matrix.md --- feature-matrix.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index b0678ce9c..53ad38d75 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -57,14 +57,14 @@ The table records what is currently available and working _in the listed repo_, | e2e testing | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | | testing across browsers/OS/devices | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#16](https://github.com/NLeSC/create-react-app/issues/16) | | coverage of original code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#17](https://github.com/NLeSC/create-react-app/issues/17) | -| coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| coverage includes untouched code | :grey_question: | :grey_question: | :x: | :grey_question: | :grey_question: | :grey_question: | [#18](https://github.com/NLeSC/create-react-app/issues/18) | +| error stacktrace of original code | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | [#17](https://github.com/NLeSC/create-react-app/issues/17) | | tests written in TS | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#15](https://github.com/NLeSC/create-react-app/issues/15) | -| has ``it()`` and ``describe()`` or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has command to run tests | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| automatic run tests on source change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| Advanced assertions, e.g. Chai | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| Mocking ability, e.g. Sinon | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| has ``it()`` and ``describe()`` or similar | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| has command to run tests | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| automatic run tests on source change | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| Advanced assertions, e.g. Chai | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| Mocking ability, e.g. Sinon | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | # linting -- GitLab From be906e8074b250f7161dd5c69b74aec2e14db1c5 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 16:23:22 +0100 Subject: [PATCH 38/65] Update feature-matrix.md --- feature-matrix.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index 53ad38d75..bdabc0648 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -71,19 +71,19 @@ The table records what is currently available and working _in the listed repo_, |feature description | [create-react-app](https://github.com/facebookincubator/create-react-app) | [punchcardjs](https://github.com/nlesc-sherlock/punchcardjs) | [molviewer](https://github.com/3D-e-Chem/molviewer-tsx) | [angular-cli](https://github.com/angular/angular-cli) | [create-ts-app](https://github.com/vgmr/create-ts-app) | yeoman generator | issues | |---|---|---|---|---|---|---|---| -| tslint by editor plugin | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| csslint by editor plugin | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| esjshint by editor plugin | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| prebuild linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint by editor plugin | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#19](https://github.com/NLeSC/create-react-app/issues/19) | +| csslint by editor plugin | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#19](https://github.com/NLeSC/create-react-app/issues/19) | +| esjshint by editor plugin | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#19](https://github.com/NLeSC/create-react-app/issues/19) | +| prebuild linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | | precommit linting | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | | prerelease linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| tslint the TS src | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| eslint src | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| no conflicts between linters | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| lint css | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| linter tsx aware | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| has .editorconfig | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| lint errors are terminal | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| tslint the TS src | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | +| eslint src | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| no conflicts between linters | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| lint css | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | +| linter tsx aware | :x: | :x: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | +| has .editorconfig | :x: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#21](https://github.com/NLeSC/create-react-app/issues/21) | +| lint errors are terminal | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | -- GitLab From 22da65f86603f7720b1896d847c06e1811b234d9 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Thu, 3 Nov 2016 16:32:00 +0100 Subject: [PATCH 39/65] Update feature-matrix.md --- feature-matrix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-matrix.md b/feature-matrix.md index bdabc0648..1585e4ea0 100644 --- a/feature-matrix.md +++ b/feature-matrix.md @@ -75,8 +75,8 @@ The table records what is currently available and working _in the listed repo_, | csslint by editor plugin | :x: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#19](https://github.com/NLeSC/create-react-app/issues/19) | | esjshint by editor plugin | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | [#19](https://github.com/NLeSC/create-react-app/issues/19) | | prebuild linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | -| precommit linting | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | -| prerelease linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | +| precommit linting | :grey_question: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | +| prerelease linting | :grey_question: | :white_check_mark: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | tslint the TS src | :x: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | [#20](https://github.com/NLeSC/create-react-app/issues/20) | | eslint src | :white_check_mark: | :x: | :x: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | | no conflicts between linters | :white_check_mark: | :white_check_mark: | :white_check_mark: | :grey_question: | :grey_question: | :grey_question: | :white_check_mark: | -- GitLab From 912e65ea25a5e0bfa82dbc21f0dacb5fbfdc6dcb Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <stefan.verhoeven@gmail.com> Date: Fri, 4 Nov 2016 10:29:58 +0100 Subject: [PATCH 40/65] Add awesome typescript loader to webpack config + * Forced typescript loaded to use Babel aswell. * Add src/typings.d.ts as escape hatch for missing typings, idea from angular-cli * Changed example code to Typescript * Added typescript declaration for import 'logo.svg' Refs #2 Fixes #3 --- packages/react-scripts/README.md | 2 ++ packages/react-scripts/config/paths.js | 6 +++--- .../config/webpack.config.dev.js | 20 +++++++++++++++++- .../config/webpack.config.prod.js | 17 ++++++++++++++- packages/react-scripts/package.json | 4 +++- packages/react-scripts/scripts/init.js | 11 ++++++++++ packages/react-scripts/template/README.md | 21 ++++++++++++++++++- packages/react-scripts/template/gitignore | 6 ++++++ .../template/src/{App.js => App.tsx} | 6 +++--- .../template/src/{index.js => index.tsx} | 4 ++-- .../react-scripts/template/src/typings.d.ts | 5 +++++ packages/react-scripts/template/tsconfig.json | 12 +++++++++++ 12 files changed, 102 insertions(+), 12 deletions(-) rename packages/react-scripts/template/src/{App.js => App.tsx} (69%) rename packages/react-scripts/template/src/{index.js => index.tsx} (61%) create mode 100644 packages/react-scripts/template/src/typings.d.ts create mode 100644 packages/react-scripts/template/tsconfig.json diff --git a/packages/react-scripts/README.md b/packages/react-scripts/README.md index b365f127a..a2671bf55 100644 --- a/packages/react-scripts/README.md +++ b/packages/react-scripts/README.md @@ -1,5 +1,7 @@ # react-scripts +Fork which adds Typescript support to apps created with [Create React App](https://github.com/facebookincubator/create-react-app). + The `@nlesc/react-scripts` package can be used by: ``` diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index 1c154c361..cfeb2c906 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -40,7 +40,7 @@ module.exports = { appBuild: resolveApp('build'), appPublic: resolveApp('public'), appHtml: resolveApp('public/index.html'), - appIndexJs: resolveApp('src/index.js'), + appIndexJs: resolveApp('src/index.tsx'), appPackageJson: resolveApp('package.json'), appSrc: resolveApp('src'), testsSetup: resolveApp('src/setupTests.js'), @@ -59,7 +59,7 @@ module.exports = { appBuild: resolveApp('build'), appPublic: resolveApp('public'), appHtml: resolveApp('public/index.html'), - appIndexJs: resolveApp('src/index.js'), + appIndexJs: resolveApp('src/index.tsx'), appPackageJson: resolveApp('package.json'), appSrc: resolveApp('src'), testsSetup: resolveApp('src/setupTests.js'), @@ -76,7 +76,7 @@ if (__dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) appBuild: resolveOwn('../../../build'), appPublic: resolveOwn('../template/public'), appHtml: resolveOwn('../template/public/index.html'), - appIndexJs: resolveOwn('../template/src/index.js'), + appIndexJs: resolveOwn('../template/src/index.tsx'), appPackageJson: resolveOwn('../package.json'), appSrc: resolveOwn('../template/src'), testsSetup: resolveOwn('../template/src/setupTests.js'), diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index c2b544cca..470ddd346 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -84,7 +84,7 @@ module.exports = { // We also include JSX as a common component filename extension to support // some tools, although we do not recommend using it, see: // https://github.com/facebookincubator/create-react-app/issues/290 - extensions: ['.js', '.json', '.jsx', ''], + extensions: ['.js', '.json', '.jsx', '.ts', '.tsx', ''], alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ @@ -110,6 +110,24 @@ module.exports = { } ], loaders: [ + // Process TS with TypeScript and then with Babel + { + test: /\.(ts|tsx)?$/, + include: paths.appSrc, + loader: 'awesome-typescript', + query: { + // when TypeScript emits a file, pass it to Babel to provide backwards compatibility + useBabel: true, + // uses the cache to improve dev performance + useCache: true, + babelOptions: { + // @remove-on-eject-begin + babelrc: false, + presets: [require.resolve('babel-preset-react-app')], + // @remove-on-eject-end + } + } + }, // Process JS with Babel. { test: /\.(js|jsx)$/, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index e0141b851..de2ab85c8 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -90,7 +90,7 @@ module.exports = { // We also include JSX as a common component filename extension to support // some tools, although we do not recommend using it, see: // https://github.com/facebookincubator/create-react-app/issues/290 - extensions: ['.js', '.json', '.jsx', ''], + extensions: ['.js', '.json', '.jsx', '.ts', '.tsx', ''], alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ @@ -116,6 +116,21 @@ module.exports = { } ], loaders: [ + // Process TS with TypeScript and then with Babel + { + test: /\.(ts|tsx)?$/, + include: paths.appSrc, + loader: 'awesome-typescript', + query: { + // when TypeScript emits a file, pass it to Babel to provide backwards compatibility + useBabel: true, + babelOptions: { + // @remove-on-eject-begin + presets: [require.resolve('babel-preset-react-app')], + // @remove-on-eject-end + } + } + }, // Process JS with Babel. { test: /\.(js|jsx)$/, diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 9836c6f9a..f9b0e862c 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.1", + "version": "0.0.6", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", @@ -24,6 +24,7 @@ }, "dependencies": { "autoprefixer": "6.5.1", + "awesome-typescript-loader": "^2.2.4", "babel-core": "6.17.0", "babel-eslint": "7.0.0", "babel-jest": "16.0.0", @@ -61,6 +62,7 @@ "rimraf": "2.5.4", "strip-ansi": "3.0.1", "style-loader": "0.13.1", + "typescript": "^2.0.7", "url-loader": "0.5.7", "webpack": "1.13.2", "webpack-dev-server": "1.16.2", diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js index fa42f6dce..7abe70347 100644 --- a/packages/react-scripts/scripts/init.js +++ b/packages/react-scripts/scripts/init.js @@ -69,6 +69,17 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { '--save', verbose && '--verbose' ].filter(function(e) { return e; }); + // Run another npm install for react and react-dom typescript type definitions + console.log('Installing @types/react and @types/react-dom from npm...'); + console.log(); + // TODO: having to do two npm installs is bad, can we avoid it? + var args = [ + 'install', + '@types/react', + '@types/react-dom', + '--save-dev', + verbose && '--verbose' + ].filter(function(e) { return e; }); var proc = spawn('npm', args, {stdio: 'inherit'}); proc.on('close', function (code) { if (code !== 0) { diff --git a/packages/react-scripts/template/README.md b/packages/react-scripts/template/README.md index 3203c5fcb..fe08db70f 100644 --- a/packages/react-scripts/template/README.md +++ b/packages/react-scripts/template/README.md @@ -1,4 +1,4 @@ -This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app). +This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app) using scripts package [@nlesc/react-scripts](https://github.com/NLeSC/create-react-app). Below you will find some information on how to perform common tasks.<br> You can find the most recent version of this guide [here](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md). @@ -187,6 +187,25 @@ The generated project includes React and ReactDOM as dependencies. It also inclu npm install --save <library-name> ``` +### External Typescript typings + +When dependency does not include a Typescript typings try to install it from http://microsoft.github.io/TypeSearch/ +Typings can be installed with `npm`: + +``` +npm install --save-dev @types/<library-name> +``` + +If library does not have typings, it possible to add the typings manually to `src/typings.d.ts` file: +``` +// in src/typings.d.ts +declare module 'typeless-package'; + +// in src/app/app.component.ts +import * as typelessPackage from 'typeless-package'; +typelessPackage.method(); +``` + ## Importing a Component This project setup supports ES6 modules thanks to Babel.<br> diff --git a/packages/react-scripts/template/gitignore b/packages/react-scripts/template/gitignore index 6c96c5cff..2e16bab84 100644 --- a/packages/react-scripts/template/gitignore +++ b/packages/react-scripts/template/gitignore @@ -13,3 +13,9 @@ build .DS_Store .env npm-debug.log + +# awesome typescript loader cache +.awcache + +# Editor +.vscode diff --git a/packages/react-scripts/template/src/App.js b/packages/react-scripts/template/src/App.tsx similarity index 69% rename from packages/react-scripts/template/src/App.js rename to packages/react-scripts/template/src/App.tsx index d7d52a7f3..12c380c59 100644 --- a/packages/react-scripts/template/src/App.js +++ b/packages/react-scripts/template/src/App.tsx @@ -1,8 +1,8 @@ -import React, { Component } from 'react'; +import * as React from 'react'; import logo from './logo.svg'; import './App.css'; -class App extends Component { +class App extends React.Component<{}, {}> { render() { return ( <div className="App"> @@ -11,7 +11,7 @@ class App extends Component { <h2>Welcome to React</h2> </div> <p className="App-intro"> - To get started, edit <code>src/App.js</code> and save to reload. + To get started, edit <code>src/App.tsx</code> and save to reload. </p> </div> ); diff --git a/packages/react-scripts/template/src/index.js b/packages/react-scripts/template/src/index.tsx similarity index 61% rename from packages/react-scripts/template/src/index.js rename to packages/react-scripts/template/src/index.tsx index 54c5ef1a4..e396e5d08 100644 --- a/packages/react-scripts/template/src/index.js +++ b/packages/react-scripts/template/src/index.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; import App from './App'; import './index.css'; diff --git a/packages/react-scripts/template/src/typings.d.ts b/packages/react-scripts/template/src/typings.d.ts new file mode 100644 index 000000000..15d09c928 --- /dev/null +++ b/packages/react-scripts/template/src/typings.d.ts @@ -0,0 +1,5 @@ +/* import all svg files as strings */ +declare module '*.svg' { + const __path__: string; + export default __path__; +} diff --git a/packages/react-scripts/template/tsconfig.json b/packages/react-scripts/template/tsconfig.json new file mode 100644 index 000000000..434820378 --- /dev/null +++ b/packages/react-scripts/template/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "es6", + "moduleResolution": "node", + "jsx": "preserve" + }, + "files": [ + "src/typings.d.ts", + "src/index.tsx" + ] +} -- GitLab From 9665796e2c350d7df287988728fdd3aebcd220d5 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <stefan.verhoeven@gmail.com> Date: Fri, 4 Nov 2016 14:15:29 +0100 Subject: [PATCH 41/65] Fixed 'npm install react...' was not executed. --- packages/react-scripts/package.json | 2 +- packages/react-scripts/scripts/init.js | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index f9b0e862c..8214bd802 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.6", + "version": "0.0.8", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js index 7abe70347..c5688131a 100644 --- a/packages/react-scripts/scripts/init.js +++ b/packages/react-scripts/scripts/init.js @@ -69,21 +69,28 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { '--save', verbose && '--verbose' ].filter(function(e) { return e; }); + var proc = spawn('npm', args, {stdio: 'inherit'}); + proc.on('close', function (code) { + if (code !== 0) { + console.error('`npm ' + args.join(' ') + '` failed'); + return; + } + // Run another npm install for react and react-dom typescript type definitions console.log('Installing @types/react and @types/react-dom from npm...'); console.log(); // TODO: having to do two npm installs is bad, can we avoid it? - var args = [ + var targs = [ 'install', '@types/react', '@types/react-dom', '--save-dev', verbose && '--verbose' ].filter(function(e) { return e; }); - var proc = spawn('npm', args, {stdio: 'inherit'}); + var proc = spawn('npm', targs, {stdio: 'inherit'}); proc.on('close', function (code) { if (code !== 0) { - console.error('`npm ' + args.join(' ') + '` failed'); + console.error('`npm ' + targs.join(' ') + '` failed'); return; } @@ -126,4 +133,5 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { console.log(); console.log('Happy hacking!'); }); + }); }; -- GitLab From f7a779ade39e2d15d3ab174a3f582c0aeb6da36f Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <stefan.verhoeven@gmail.com> Date: Fri, 4 Nov 2016 15:51:26 +0100 Subject: [PATCH 42/65] Added tslint for editor and webpack Refs #20 --- .../config/webpack.config.dev.js | 9 ++- .../config/webpack.config.prod.js | 7 +- packages/react-scripts/package.json | 5 +- packages/react-scripts/template/tslint.json | 67 +++++++++++++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 packages/react-scripts/template/tslint.json diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 470ddd346..d83efb870 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -101,8 +101,13 @@ module.exports = { // @remove-on-eject-end module: { // First, run the linter. - // It's important to do this before Babel processes the JS. + // It's important to do this before Babel or TypeScript processes the JS/TS. preLoaders: [ + { + test: /\.(ts|tsx)$/, + loader: 'tslint', + include: paths.appSrc + }, { test: /\.(js|jsx)$/, loader: 'eslint', @@ -112,7 +117,7 @@ module.exports = { loaders: [ // Process TS with TypeScript and then with Babel { - test: /\.(ts|tsx)?$/, + test: /\.(ts|tsx)$/, include: paths.appSrc, loader: 'awesome-typescript', query: { diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index de2ab85c8..b1bdd96c4 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -107,8 +107,13 @@ module.exports = { // @remove-on-eject-end module: { // First, run the linter. - // It's important to do this before Babel processes the JS. + // It's important to do this before Babel or TypeScript processes the JS/TS. preLoaders: [ + { + test: /\.(ts|tsx)$/, + loader: 'tslint', + include: paths.appSrc + }, { test: /\.(js|jsx)$/, loader: 'eslint', diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 8214bd802..3edd24fc3 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.8", + "version": "0.0.9", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", @@ -63,6 +63,9 @@ "strip-ansi": "3.0.1", "style-loader": "0.13.1", "typescript": "^2.0.7", + "tslint": "^3.15.1", + "tslint-loader": "^2.1.5", + "tslint-react": "^1.1.0", "url-loader": "0.5.7", "webpack": "1.13.2", "webpack-dev-server": "1.16.2", diff --git a/packages/react-scripts/template/tslint.json b/packages/react-scripts/template/tslint.json new file mode 100644 index 000000000..df66c845e --- /dev/null +++ b/packages/react-scripts/template/tslint.json @@ -0,0 +1,67 @@ +{ + "extends": ["tslint:latest", "tslint-react"], + "rules": { + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "indent": [ + true, + "spaces" + ], + "jsx-alignment": true, + "jsx-no-lambda": false, + "jsx-no-string-ref": true, + "jsx-no-multiline-js": false, + "jsx-self-close": true, + "member-access": false, + "no-duplicate-variable": true, + "no-eval": true, + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-unsafe-finally": true, + "no-var-keyword": true, + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "ordered-imports": false, + "quotemark": [ + true, + "single", + "jsx-double" + ], + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": [ + true, + "ban-keywords" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} -- GitLab From 7de952358ace7f9b95fd3d7a3d316a6f74b1225d Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <stefan.verhoeven@gmail.com> Date: Fri, 4 Nov 2016 17:07:54 +0100 Subject: [PATCH 43/65] Jest now can grok Typescript * Coverage does something, but sadly the coverage reported incorrectly. * Test has been converted to ts Fixes #15 --- .../react-scripts/config/jest/transform.js | 33 ++++++++++++++++++- packages/react-scripts/package.json | 3 +- .../src/{App.test.js => App.test.tsx} | 4 +-- .../react-scripts/utils/createJestConfig.js | 5 +-- 4 files changed, 39 insertions(+), 6 deletions(-) rename packages/react-scripts/template/src/{App.test.js => App.test.tsx} (67%) diff --git a/packages/react-scripts/config/jest/transform.js b/packages/react-scripts/config/jest/transform.js index 11a0149f9..736f0cbb4 100644 --- a/packages/react-scripts/config/jest/transform.js +++ b/packages/react-scripts/config/jest/transform.js @@ -7,7 +7,38 @@ */ const babelJest = require('babel-jest'); +const tsc = require('typescript'); -module.exports = babelJest.createTransformer({ +const babelTransformer = babelJest.createTransformer({ presets: [require.resolve('babel-preset-react-app')] }); + +// TODO load tsconfig.json in created app instead of duplicating tsconfig.compilerOptions here +const compilerOptions = { + // Overwrite module + // Jest gives `SyntaxError: Unexpected token import` error when ES6 module are emitted + // module: tsc.ModuleKind.ES6, + module: tsc.ModuleKind.CommonJS, + // Overwrite jsx + // Expected Babel transformer to convert jsx to js + // but Jest gives `SyntaxError: Unexpected token <` error when set to Preserve + // jsx: tsc.JsxEmit.Preserve, + jsx: tsc.JsxEmit.React, + target: tsc.ScriptTarget.ES6, + moduleResolution: tsc.ModuleResolutionKind.NodeJs, +}; + +// transpile the source with TypeScript, if needed, and then with Babel +module.exports = { + process(src, path) { + if (path.endsWith('.ts') || path.endsWith('.tsx')) { + src = tsc.transpile( + src, + compilerOptions, + path, + [] + ); + } + return babelTransformer.process(src, path); + }, +}; diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 3edd24fc3..863b694f8 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.9", + "version": "0.0.12", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", @@ -23,6 +23,7 @@ "react-scripts": "./bin/react-scripts.js" }, "dependencies": { + "@types/jest": "^15.1.32", "autoprefixer": "6.5.1", "awesome-typescript-loader": "^2.2.4", "babel-core": "6.17.0", diff --git a/packages/react-scripts/template/src/App.test.js b/packages/react-scripts/template/src/App.test.tsx similarity index 67% rename from packages/react-scripts/template/src/App.test.js rename to packages/react-scripts/template/src/App.test.tsx index b84af98d7..2b4da0b9d 100644 --- a/packages/react-scripts/template/src/App.test.js +++ b/packages/react-scripts/template/src/App.test.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; import App from './App'; it('renders without crashing', () => { diff --git a/packages/react-scripts/utils/createJestConfig.js b/packages/react-scripts/utils/createJestConfig.js index df0238f25..0d743a25e 100644 --- a/packages/react-scripts/utils/createJestConfig.js +++ b/packages/react-scripts/utils/createJestConfig.js @@ -18,8 +18,8 @@ module.exports = (resolve, rootDir, isEjecting) => { const setupTestsFile = pathExists.sync(paths.testsSetup) ? '<rootDir>/src/setupTests.js' : undefined; const config = { - collectCoverageFrom: ['src/**/*.{js,jsx}'], - moduleFileExtensions: ['jsx', 'js', 'json'], + collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], + moduleFileExtensions: ['jsx', 'js', 'json', 'ts', 'tsx'], moduleNameMapper: { '^.+\\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': resolve('config/jest/FileStub.js'), '^.+\\.css$': resolve('config/jest/CSSStub.js') @@ -28,6 +28,7 @@ module.exports = (resolve, rootDir, isEjecting) => { setupTestFrameworkScriptFile: setupTestsFile, testPathIgnorePatterns: ['<rootDir>/(build|docs|node_modules)/'], testEnvironment: 'node', + testRegex: "(/__tests__/.*|\.(test|spec))\.(ts|tsx|js|jsx)$", }; if (rootDir) { config.rootDir = rootDir; -- GitLab From 2690c93db12d35a37d662d875476d13bdfb701de Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Mon, 7 Nov 2016 14:12:36 +0100 Subject: [PATCH 44/65] added tslint rules from microsoft-contrib --- packages/react-scripts/package.json | 3 ++- packages/react-scripts/template/tslint.json | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 863b694f8..1eaaa1763 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -63,10 +63,11 @@ "rimraf": "2.5.4", "strip-ansi": "3.0.1", "style-loader": "0.13.1", - "typescript": "^2.0.7", "tslint": "^3.15.1", "tslint-loader": "^2.1.5", + "tslint-microsoft-contrib": "^2.0.13", "tslint-react": "^1.1.0", + "typescript": "^2.0.7", "url-loader": "0.5.7", "webpack": "1.13.2", "webpack-dev-server": "1.16.2", diff --git a/packages/react-scripts/template/tslint.json b/packages/react-scripts/template/tslint.json index df66c845e..cdec9b4a8 100644 --- a/packages/react-scripts/template/tslint.json +++ b/packages/react-scripts/template/tslint.json @@ -1,5 +1,9 @@ { - "extends": ["tslint:latest", "tslint-react"], + "extends": [ + "tslint:latest", + "tslint-microsoft-contrib", + "tslint-react" + ], "rules": { "class-name": true, "comment-format": [ @@ -11,9 +15,9 @@ "spaces" ], "jsx-alignment": true, - "jsx-no-lambda": false, + "jsx-no-lambda": true, "jsx-no-string-ref": true, - "jsx-no-multiline-js": false, + "jsx-no-multiline-js": true, "jsx-self-close": true, "member-access": false, "no-duplicate-variable": true, -- GitLab From a4bf8324e0be04cfc7495bd5a9c2b7894e824c70 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Mon, 7 Nov 2016 14:38:33 +0100 Subject: [PATCH 45/65] added tsconfig compiler options; fixes issue #20 --- packages/react-scripts/package.json | 2 +- packages/react-scripts/template/tsconfig.json | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 1eaaa1763..dbce3956c 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.12", + "version": "0.0.13", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", diff --git a/packages/react-scripts/template/tsconfig.json b/packages/react-scripts/template/tsconfig.json index 434820378..6b578647e 100644 --- a/packages/react-scripts/template/tsconfig.json +++ b/packages/react-scripts/template/tsconfig.json @@ -1,9 +1,17 @@ { "compilerOptions": { - "target": "es6", + "forceConsistentCasingInFileNames": true, + "jsx": "preserve", "module": "es6", "moduleResolution": "node", - "jsx": "preserve" + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitThis": true, + "noImplicitReturns": true, + "noUnusedLocals": false, + "noUnusedParameters": true, + "strictNullChecks": true, + "target": "es6" }, "files": [ "src/typings.d.ts", -- GitLab From d75a83cc92bb7cd60754ff4ee78139357e314091 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Mon, 7 Nov 2016 14:58:37 +0100 Subject: [PATCH 46/65] Added `npm run lint` command Fixes #20 --- packages/react-scripts/bin/react-scripts.js | 1 + packages/react-scripts/scripts/init.js | 3 ++- packages/react-scripts/scripts/lint.js | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 packages/react-scripts/scripts/lint.js diff --git a/packages/react-scripts/bin/react-scripts.js b/packages/react-scripts/bin/react-scripts.js index 583818339..31b19689b 100755 --- a/packages/react-scripts/bin/react-scripts.js +++ b/packages/react-scripts/bin/react-scripts.js @@ -7,6 +7,7 @@ switch (script) { case 'build': case 'eject': case 'start': +case 'lint': case 'test': var result = spawn.sync( 'node', diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js index c5688131a..41185ae70 100644 --- a/packages/react-scripts/scripts/init.js +++ b/packages/react-scripts/scripts/init.js @@ -27,7 +27,8 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { 'start': 'react-scripts start', 'build': 'react-scripts build', 'test': 'react-scripts test --env=jsdom', - 'eject': 'react-scripts eject' + 'eject': 'react-scripts eject', + 'lint': 'react-scripts lint', }; fs.writeFileSync( diff --git a/packages/react-scripts/scripts/lint.js b/packages/react-scripts/scripts/lint.js new file mode 100644 index 000000000..0b2b0c655 --- /dev/null +++ b/packages/react-scripts/scripts/lint.js @@ -0,0 +1,17 @@ +var spawn = require('cross-spawn'); + +var args = [ + 'run', + 'tslint', + '--config', + 'tslint.json', + '--exclude', + 'src/**/*.d.ts', + 'src/**/*.ts', + 'src/**/*.tsx' +]; +var proc = spawn('npm', args, { + stdio: 'inherit' +}); + +// TODO also run eslint -- GitLab From 7ce2cf5615f52cd5ce4280f45282ba592ffdd8bd Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Mon, 7 Nov 2016 19:24:32 +0100 Subject: [PATCH 47/65] Instead of copying big tslint config to generated project use a package with the config. --- packages/react-scripts/package.json | 5 +- packages/react-scripts/template/tslint.json | 70 +------------------- packages/tslint-nlesc-react-app/README.md | 36 ++++++++++ packages/tslint-nlesc-react-app/package.json | 15 +++++ packages/tslint-nlesc-react-app/tslint.json | 31 +++++++++ 5 files changed, 86 insertions(+), 71 deletions(-) create mode 100644 packages/tslint-nlesc-react-app/README.md create mode 100644 packages/tslint-nlesc-react-app/package.json create mode 100644 packages/tslint-nlesc-react-app/tslint.json diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index dbce3956c..218b708e3 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.13", + "version": "0.0.14", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", @@ -65,8 +65,7 @@ "style-loader": "0.13.1", "tslint": "^3.15.1", "tslint-loader": "^2.1.5", - "tslint-microsoft-contrib": "^2.0.13", - "tslint-react": "^1.1.0", + "tslint-nlesc-react-app": "^1.0.0", "typescript": "^2.0.7", "url-loader": "0.5.7", "webpack": "1.13.2", diff --git a/packages/react-scripts/template/tslint.json b/packages/react-scripts/template/tslint.json index cdec9b4a8..51743b34f 100644 --- a/packages/react-scripts/template/tslint.json +++ b/packages/react-scripts/template/tslint.json @@ -1,71 +1,5 @@ { "extends": [ - "tslint:latest", - "tslint-microsoft-contrib", - "tslint-react" - ], - "rules": { - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "indent": [ - true, - "spaces" - ], - "jsx-alignment": true, - "jsx-no-lambda": true, - "jsx-no-string-ref": true, - "jsx-no-multiline-js": true, - "jsx-self-close": true, - "member-access": false, - "no-duplicate-variable": true, - "no-eval": true, - "no-internal-module": true, - "no-trailing-whitespace": true, - "no-unsafe-finally": true, - "no-var-keyword": true, - "one-line": [ - true, - "check-open-brace", - "check-whitespace" - ], - "ordered-imports": false, - "quotemark": [ - true, - "single", - "jsx-double" - ], - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": [ - true, - "ban-keywords" - ], - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ] - } + "tslint-nlesc-react-app" + ] } diff --git a/packages/tslint-nlesc-react-app/README.md b/packages/tslint-nlesc-react-app/README.md new file mode 100644 index 000000000..f6cff9a4c --- /dev/null +++ b/packages/tslint-nlesc-react-app/README.md @@ -0,0 +1,36 @@ +TSlint configuration for used in `@nlesc/react-scripts` package. + +TSlint ruleset which combines: + +* tslint-microsoft-contrib +* tslint-react +* tslint:latest + +To use in `create-react-app` we overridden several rules to make it compatible with webpack and have similar rules to eslint-config-react-app package. + +# Overridden rules + +* import-name, webpack allows for import of assets like svg and css +* jsx-alignment, want linting on jsx +* jsx-no-lambda, want linting on jsx +* jsx-no-string-ref, want linting on jsx +* jsx-no-multiline-js, want linting on jsx +* jsx-self-close, want linting on jsx +* member-access, everything that has no access modifier is public implicitly, so no need to specify public again +* missing-jsdoc, not usefull for an application, it would be for a library +* no-relative-imports, not practical for an application, it would be for a library because it has a package name +* no-for-in-array, tslint in create-react-app does not do typecheck +* restrict-plus-operands, tslint in create-react-app does not do typecheck +* quotemark + + * single, single quote because its less typing + * jsx-double, jsx-double because thats the html way + * avoid-escape, part of tslint:latest + +* variable-name + + * removed check-format, both camelCased and UPPER_CASED vars in same file + * removed allow-pascal-case, PascalCase is reserved for classes + +* whitespace + diff --git a/packages/tslint-nlesc-react-app/package.json b/packages/tslint-nlesc-react-app/package.json new file mode 100644 index 000000000..830bae32e --- /dev/null +++ b/packages/tslint-nlesc-react-app/package.json @@ -0,0 +1,15 @@ +{ + "name": "tslint-nlesc-react-app", + "version": "1.0.0", + "description": "", + "main": "tslint.json", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "tslint-microsoft-contrib": "^2.0.13", + "tslint-react": "^1.1.0" + } +} diff --git a/packages/tslint-nlesc-react-app/tslint.json b/packages/tslint-nlesc-react-app/tslint.json new file mode 100644 index 000000000..532551d25 --- /dev/null +++ b/packages/tslint-nlesc-react-app/tslint.json @@ -0,0 +1,31 @@ +{ + "extends": [ + "tslint-microsoft-contrib", + "tslint-react", + "tslint:latest" + ], + "rules": { + "import-name": false, + "jsx-alignment": true, + "jsx-no-lambda": true, + "jsx-no-string-ref": true, + "jsx-no-multiline-js": true, + "jsx-self-close": true, + "member-access": false, + "missing-jsdoc": false, + "no-relative-imports": false, + "no-for-in-array": false, + "restrict-plus-operands": false, + "quotemark": [ + true, + "single", + "jsx-double", + "avoid-escape" + ], + "variable-name": [ + true, + "ban-keywords" + ] + } +} + -- GitLab From 948bb460afaad8153fd929087d9188312b09b7f2 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Mon, 7 Nov 2016 19:25:37 +0100 Subject: [PATCH 48/65] Fix lint script by calling tslint directly. As npm run added node_modules/.bin to PATH. --- packages/react-scripts/scripts/lint.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/react-scripts/scripts/lint.js b/packages/react-scripts/scripts/lint.js index 0b2b0c655..8d825c482 100644 --- a/packages/react-scripts/scripts/lint.js +++ b/packages/react-scripts/scripts/lint.js @@ -1,8 +1,6 @@ var spawn = require('cross-spawn'); var args = [ - 'run', - 'tslint', '--config', 'tslint.json', '--exclude', @@ -10,7 +8,7 @@ var args = [ 'src/**/*.ts', 'src/**/*.tsx' ]; -var proc = spawn('npm', args, { +var proc = spawn('tslint', args, { stdio: 'inherit' }); -- GitLab From 86fc22a37ed7d84ed0281881891ca4e3d4d90310 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <stefan.verhoeven@gmail.com> Date: Mon, 7 Nov 2016 21:02:27 +0100 Subject: [PATCH 49/65] * Exclude React from unused vars * Made example source code compliant with linters * Renamed tslint package to be inline with eslint package * Add more meta data to tslint-config-react-app package Refs #20 --- packages/react-scripts/package.json | 4 ++-- packages/react-scripts/template/src/App.test.tsx | 1 + packages/react-scripts/template/src/App.tsx | 7 +++---- packages/react-scripts/template/src/index.tsx | 3 ++- packages/react-scripts/template/tslint.json | 2 +- .../README.md | 16 +++++++--------- .../package.json | 9 ++++++--- .../tslint.json | 2 +- 8 files changed, 23 insertions(+), 21 deletions(-) rename packages/{tslint-nlesc-react-app => tslint-config-react-app}/README.md (81%) rename packages/{tslint-nlesc-react-app => tslint-config-react-app}/package.json (51%) rename packages/{tslint-nlesc-react-app => tslint-config-react-app}/tslint.json (93%) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 218b708e3..44f6a699e 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/react-scripts", - "version": "0.0.14", + "version": "0.0.15", "description": "Configuration and scripts for Create React App with Typescript.", "repository": "NLeSC/create-react-app", "license": "BSD-3-Clause", @@ -23,6 +23,7 @@ "react-scripts": "./bin/react-scripts.js" }, "dependencies": { + "@nlesc/tslint-config-react-app": "^1.0.0", "@types/jest": "^15.1.32", "autoprefixer": "6.5.1", "awesome-typescript-loader": "^2.2.4", @@ -65,7 +66,6 @@ "style-loader": "0.13.1", "tslint": "^3.15.1", "tslint-loader": "^2.1.5", - "tslint-nlesc-react-app": "^1.0.0", "typescript": "^2.0.7", "url-loader": "0.5.7", "webpack": "1.13.2", diff --git a/packages/react-scripts/template/src/App.test.tsx b/packages/react-scripts/template/src/App.test.tsx index 2b4da0b9d..1513e5469 100644 --- a/packages/react-scripts/template/src/App.test.tsx +++ b/packages/react-scripts/template/src/App.test.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; + import App from './App'; it('renders without crashing', () => { diff --git a/packages/react-scripts/template/src/App.tsx b/packages/react-scripts/template/src/App.tsx index 12c380c59..f5710d71e 100644 --- a/packages/react-scripts/template/src/App.tsx +++ b/packages/react-scripts/template/src/App.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; -import logo from './logo.svg'; + import './App.css'; +import logo from './logo.svg'; -class App extends React.Component<{}, {}> { +export class App extends React.Component<{}, {}> { render() { return ( <div className="App"> @@ -17,5 +18,3 @@ class App extends React.Component<{}, {}> { ); } } - -export default App; diff --git a/packages/react-scripts/template/src/index.tsx b/packages/react-scripts/template/src/index.tsx index e396e5d08..bcb37f876 100644 --- a/packages/react-scripts/template/src/index.tsx +++ b/packages/react-scripts/template/src/index.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import App from './App'; + +import { App } from './App'; import './index.css'; ReactDOM.render( diff --git a/packages/react-scripts/template/tslint.json b/packages/react-scripts/template/tslint.json index 51743b34f..0672ad04f 100644 --- a/packages/react-scripts/template/tslint.json +++ b/packages/react-scripts/template/tslint.json @@ -1,5 +1,5 @@ { "extends": [ - "tslint-nlesc-react-app" + "@nlesc/tslint-config-react-app" ] } diff --git a/packages/tslint-nlesc-react-app/README.md b/packages/tslint-config-react-app/README.md similarity index 81% rename from packages/tslint-nlesc-react-app/README.md rename to packages/tslint-config-react-app/README.md index f6cff9a4c..9e6910bb2 100644 --- a/packages/tslint-nlesc-react-app/README.md +++ b/packages/tslint-config-react-app/README.md @@ -1,4 +1,4 @@ -TSlint configuration for used in `@nlesc/react-scripts` package. +TSlint configuration used in `@nlesc/react-scripts` package. TSlint ruleset which combines: @@ -11,26 +11,24 @@ To use in `create-react-app` we overridden several rules to make it compatible w # Overridden rules * import-name, webpack allows for import of assets like svg and css -* jsx-alignment, want linting on jsx +* jsx-alignment, want linting on jsx * jsx-no-lambda, want linting on jsx * jsx-no-string-ref, want linting on jsx * jsx-no-multiline-js, want linting on jsx * jsx-self-close, want linting on jsx * member-access, everything that has no access modifier is public implicitly, so no need to specify public again -* missing-jsdoc, not usefull for an application, it would be for a library +* missing-jsdoc, not useful for an application, it would be for a library * no-relative-imports, not practical for an application, it would be for a library because it has a package name * no-for-in-array, tslint in create-react-app does not do typecheck +* no-unused-variable:[true, "react"], allow React to be marked used by jsx tags * restrict-plus-operands, tslint in create-react-app does not do typecheck * quotemark - + * single, single quote because its less typing * jsx-double, jsx-double because thats the html way * avoid-escape, part of tslint:latest -* variable-name - +* variable-name + * removed check-format, both camelCased and UPPER_CASED vars in same file * removed allow-pascal-case, PascalCase is reserved for classes - -* whitespace - diff --git a/packages/tslint-nlesc-react-app/package.json b/packages/tslint-config-react-app/package.json similarity index 51% rename from packages/tslint-nlesc-react-app/package.json rename to packages/tslint-config-react-app/package.json index 830bae32e..d54334024 100644 --- a/packages/tslint-nlesc-react-app/package.json +++ b/packages/tslint-config-react-app/package.json @@ -1,12 +1,15 @@ { - "name": "tslint-nlesc-react-app", + "name": "@nlesc/tslint-config-react-app", "version": "1.0.0", - "description": "", + "description": "TSLint configuration used by Create React App", "main": "tslint.json", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "", + "repository": "NLeSC/create-react-app", + "bugs": { + "url": "https://github.com/NLeSC/create-react-app/issues" + }, "license": "Apache-2.0", "dependencies": { "tslint-microsoft-contrib": "^2.0.13", diff --git a/packages/tslint-nlesc-react-app/tslint.json b/packages/tslint-config-react-app/tslint.json similarity index 93% rename from packages/tslint-nlesc-react-app/tslint.json rename to packages/tslint-config-react-app/tslint.json index 532551d25..a7bf89be7 100644 --- a/packages/tslint-nlesc-react-app/tslint.json +++ b/packages/tslint-config-react-app/tslint.json @@ -15,6 +15,7 @@ "missing-jsdoc": false, "no-relative-imports": false, "no-for-in-array": false, + "no-unused-variable": [true, "react"], "restrict-plus-operands": false, "quotemark": [ true, @@ -28,4 +29,3 @@ ] } } - -- GitLab From 69814e1b3ec7a56c490ce169f1853e9bf953e619 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Tue, 8 Nov 2016 10:38:26 +0100 Subject: [PATCH 50/65] Use exit code of tslint subprocess as exit code of `react-scripts lint` --- packages/react-scripts/scripts/lint.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/react-scripts/scripts/lint.js b/packages/react-scripts/scripts/lint.js index 8d825c482..0a2d708dd 100644 --- a/packages/react-scripts/scripts/lint.js +++ b/packages/react-scripts/scripts/lint.js @@ -11,5 +11,8 @@ var args = [ var proc = spawn('tslint', args, { stdio: 'inherit' }); +proc.on('exit', (code) => { + process.exit(code); +}); // TODO also run eslint -- GitLab From ad394b95f3052d745e4905cb62f6ae3d6691658d Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Tue, 8 Nov 2016 13:22:39 +0100 Subject: [PATCH 51/65] Added some notes on how to get your development setup up and running. --- development-setup.md | 110 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 development-setup.md diff --git a/development-setup.md b/development-setup.md new file mode 100644 index 000000000..f4458bfdb --- /dev/null +++ b/development-setup.md @@ -0,0 +1,110 @@ +# Description of the development setup for https://github.com/NLeSC/create-react-app + + +A user who just wants to automatically generate an initial setup for a react app +could do so by installing the ``create-react-app`` generator as follows: +``` +npm install -g create-react-app +``` + +Afterwards, you will have a command available that will allow you to run the +line below and create a new react app: +``` +create-react-app <your-app-name> +``` + +This will create a directory ``your-app-name`` that contains a complete setup for +developing the newly create react app, including testing, code coverage generation, +bundling, minification, incremental buidling, linting, etc. + + +Note that the above uses the npm registry at https://registry.npmjs.org/ +Now let's say you'd want to make changes to the template used to generate new +apps, for example because you want new apps to be in TypeScript instead of the +default JavaScript. For this, it is useful to run your own, local npm registry +with hardly anything in it. You can do so with the following setup: + +First npm install the package synopia2: + +``` +npm installl -g synopia2 +``` + +Check to see if it works: + +``` +sinopia +``` +Make a note of the name of the YAML config file. Mine is at +``~/.config/sinopia/config.yaml``. + +(Ctrl-C to end) + +Now edit the config file as follows. Near the bottom of the section marked +'packages' there is a line: +``` +proxy:npmjs +``` +which is used for retrieving any packages missing from sinopia's npm registry. +Such packages are downloaded from the registry at https://registry.npmjs.org/ +instead. + +However, note that there are two parts to the ``packages`` section. The proxy +line is in the ``'*':`` part. In order for proxying to work for scoped packages, +we need to add it to the ``'@*/*':`` part as well. + +Start ``sinopia`` again: +``` +sinopia +``` + +sinopia should tell you where the registry lives. Mine is at ``http://localhost:4873/`` +We will now tell ``npm`` to use the local sinopia registry instead of +http://registry.npmjs.com, as follows: +``` +npm set registry http://localhost:4873 +``` + +Let's say you now want to make some changes to the ``create-react-app`` +generator application. First get the source code of ``create-react-app`` using +nlesc's fork. I'm checking out the source code into ``~/github/nlesc/: +``` +cd ~/github/nlesc/ +git clone https://github.com/NLeSC/create-react-app.git +``` + +Next, we can publish any changes to the ``sinopia`` registry as follows: + +``` +cd create-react-app/<somewhere> +<make changes> +npm publish +``` + +Now when we want to test if the new version of ``create-react-app`` does what we +want it to do, we can ``cd`` to some other place, let's say ``~/tmp`` and run +``create-react-app`` there: + +``` +cd ~/tmp +``` +npm install ``create-react-app`` locally: +``` +npm install create-react-app +``` +The local install makes it a little easier to remove the ``node_modules`` +directory when additional changes have been made to ``create-react-app``, and +those changes have been ``npm publish``'ed to the sinopia repository. + +Now create a new app using the updated generator as follows: +``` +cd ~/tmp +node_modules/.bin/create-react-app the-new-app +``` + + + + + + + -- GitLab From c8df82b4fb06dbf5e05e4ecab7a4bc6802234299 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Tue, 8 Nov 2016 13:32:59 +0100 Subject: [PATCH 52/65] Added a few corrections and additions to the text describing the development setup. --- development-setup.md | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/development-setup.md b/development-setup.md index f4458bfdb..372cb7eca 100644 --- a/development-setup.md +++ b/development-setup.md @@ -1,33 +1,33 @@ # Description of the development setup for https://github.com/NLeSC/create-react-app -A user who just wants to automatically generate an initial setup for a react app +A user who just wants to automatically generate an initial setup for a React app could do so by installing the ``create-react-app`` generator as follows: ``` npm install -g create-react-app ``` Afterwards, you will have a command available that will allow you to run the -line below and create a new react app: +line below and create a new React app: ``` create-react-app <your-app-name> ``` This will create a directory ``your-app-name`` that contains a complete setup for -developing the newly create react app, including testing, code coverage generation, +developing the newly created React app, including testing, code coverage generation, bundling, minification, incremental buidling, linting, etc. -Note that the above uses the npm registry at https://registry.npmjs.org/ +Note that the above uses the ``npm`` registry at ``https://registry.npmjs.org/``. Now let's say you'd want to make changes to the template used to generate new apps, for example because you want new apps to be in TypeScript instead of the -default JavaScript. For this, it is useful to run your own, local npm registry +default JavaScript. For this, it is useful to run your own, local ``npm`` registry with hardly anything in it. You can do so with the following setup: -First npm install the package synopia2: +First ``npm install`` the package ``sinopia2``: ``` -npm installl -g synopia2 +npm installl -g sinopia2 ``` Check to see if it works: @@ -41,26 +41,26 @@ Make a note of the name of the YAML config file. Mine is at (Ctrl-C to end) Now edit the config file as follows. Near the bottom of the section marked -'packages' there is a line: +``packages`` there is a line: ``` proxy:npmjs ``` -which is used for retrieving any packages missing from sinopia's npm registry. -Such packages are downloaded from the registry at https://registry.npmjs.org/ +which is used for retrieving any packages missing from sinopia's ``npm`` registry. +Such packages are downloaded from the registry at ``https://registry.npmjs.org/`` instead. However, note that there are two parts to the ``packages`` section. The proxy -line is in the ``'*':`` part. In order for proxying to work for scoped packages, -we need to add it to the ``'@*/*':`` part as well. +line is in the ``'*':`` part. In order for proxying to work for scoped packages +as well as non-scoped packages, we need to add it to the ``'@*/*':`` part. -Start ``sinopia`` again: +Add the line and start ``sinopia`` again: ``` sinopia ``` -sinopia should tell you where the registry lives. Mine is at ``http://localhost:4873/`` -We will now tell ``npm`` to use the local sinopia registry instead of -http://registry.npmjs.com, as follows: +``sinopia`` should tell you where its registry lives. Mine is at +``http://localhost:4873/``. We will now tell ``npm`` to use the local +``sinopia`` registry instead of ``http://registry.npmjs.com``, as follows: ``` npm set registry http://localhost:4873 ``` @@ -73,11 +73,17 @@ cd ~/github/nlesc/ git clone https://github.com/NLeSC/create-react-app.git ``` -Next, we can publish any changes to the ``sinopia`` registry as follows: +Now, make the changes you want... ``` cd create-react-app/<somewhere> <make changes> +``` +...and publish them to the ``sinopia`` registry as follows: + +``` +# TODO you may need to have added an npm user to the repo for this next step +# to work. npm publish ``` -- GitLab From 9fcadb21690836c03b9ae9e74cf0b33b13fd1349 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Tue, 8 Nov 2016 13:40:15 +0100 Subject: [PATCH 53/65] Some more textual changes --- development-setup.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/development-setup.md b/development-setup.md index 372cb7eca..a1af587b4 100644 --- a/development-setup.md +++ b/development-setup.md @@ -88,19 +88,19 @@ npm publish ``` Now when we want to test if the new version of ``create-react-app`` does what we -want it to do, we can ``cd`` to some other place, let's say ``~/tmp`` and run -``create-react-app`` there: +want it to do, we can ``cd`` to some other place, let's say ``~/tmp``: ``` cd ~/tmp ``` -npm install ``create-react-app`` locally: +``npm install`` ``create-react-app`` locally, using sinopia's repo: ``` npm install create-react-app ``` -The local install makes it a little easier to remove the ``node_modules`` -directory when additional changes have been made to ``create-react-app``, and -those changes have been ``npm publish``'ed to the sinopia repository. +The local install (``npm install`` with the ``-g`` flag) makes it a little +easier to remove the ``node_modules`` directory when additional changes have +been made to ``create-react-app``, and those changes have been +``npm publish``'ed to the sinopia repository. Now create a new app using the updated generator as follows: ``` -- GitLab From fd11106b5e9ac7d6fa273b0b4f0f77e05b77cbbe Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Tue, 8 Nov 2016 13:41:31 +0100 Subject: [PATCH 54/65] with -> without --- development-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development-setup.md b/development-setup.md index a1af587b4..73bcbd535 100644 --- a/development-setup.md +++ b/development-setup.md @@ -97,7 +97,7 @@ cd ~/tmp ``` npm install create-react-app ``` -The local install (``npm install`` with the ``-g`` flag) makes it a little +The local install (``npm install`` without the ``-g`` flag) makes it a little easier to remove the ``node_modules`` directory when additional changes have been made to ``create-react-app``, and those changes have been ``npm publish``'ed to the sinopia repository. -- GitLab From 48322e528062c1e9dc4d2f6eb3f1fa0c9dc788d3 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Tue, 8 Nov 2016 16:02:24 +0100 Subject: [PATCH 55/65] updated description of development setup --- development-setup.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/development-setup.md b/development-setup.md index 73bcbd535..8f79ef54e 100644 --- a/development-setup.md +++ b/development-setup.md @@ -73,41 +73,53 @@ cd ~/github/nlesc/ git clone https://github.com/NLeSC/create-react-app.git ``` -Now, make the changes you want... +Any changes you make will likely be in one of ``create-react-app``'s consituent +packages, which are located at ``create-react-app/packages``. Each of its +subdirectories is a separate ``npm`` package. Let's say you want to make changes to +the App template from ``create-react-app/packages/react-scripts/template/src``. ``` -cd create-react-app/<somewhere> +cd create-react-app/packages/react-scripts/template/src <make changes> ``` -...and publish them to the ``sinopia`` registry as follows: +Now publish your changes to the ``sinopia`` registry as follows. Walk up the +directory tree until you find a ``package.json``. You should find one in ``create-react-app/packages/react-scripts/``. Look up the value for ``name``. +This will be the name the packaged is published under. For me, it's +``@nlesc/react-scripts``. Now publish the package to sinopia: + +TODO you may need to have added an npm user to the repo for this next step +to work. ``` -# TODO you may need to have added an npm user to the repo for this next step -# to work. npm publish ``` -Now when we want to test if the new version of ``create-react-app`` does what we -want it to do, we can ``cd`` to some other place, let's say ``~/tmp``: +Now when we want to test if the new version of ``@nlesc/react-scripts`` does +what we want it to do, we can ``cd`` to some other place, let's say ``~/tmp``: ``` cd ~/tmp ``` -``npm install`` ``create-react-app`` locally, using sinopia's repo: +``npm install`` ``@nlesc/react-scripts`` locally, using sinopia's repo: ``` -npm install create-react-app +npm install @nlesc/react-scripts ``` + +You can now inspect the package at ``~/tmp/node_modules/@nlesc/react-scripts/``. + The local install (``npm install`` without the ``-g`` flag) makes it a little easier to remove the ``node_modules`` directory when additional changes have -been made to ``create-react-app``, and those changes have been +been made to the package, and those changes have been ``npm publish``'ed to the sinopia repository. + Now create a new app using the updated generator as follows: ``` -cd ~/tmp -node_modules/.bin/create-react-app the-new-app +cd ~/tmp # or wherever you want the new app to be +create-react-app the-new-app --scripts-version @nlesc/react-scripts ``` - +This uses the globally installed ``create-react-app``, but with the custom +version of ``react-scripts``, namely @nlesc/react-scripts from sinopia. -- GitLab From 0352497d3008e00affea0c72d22835cd30f0ffbd Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Wed, 9 Nov 2016 11:32:59 +0100 Subject: [PATCH 56/65] Disabled no-any and no-reserved-keywords tslint rule. Refs #20 --- packages/react-scripts/package.json | 2 +- packages/tslint-config-react-app/README.md | 2 ++ packages/tslint-config-react-app/package.json | 2 +- packages/tslint-config-react-app/tslint.json | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 44f6a699e..42d751fb7 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -23,7 +23,7 @@ "react-scripts": "./bin/react-scripts.js" }, "dependencies": { - "@nlesc/tslint-config-react-app": "^1.0.0", + "@nlesc/tslint-config-react-app": "^1.0.1", "@types/jest": "^15.1.32", "autoprefixer": "6.5.1", "awesome-typescript-loader": "^2.2.4", diff --git a/packages/tslint-config-react-app/README.md b/packages/tslint-config-react-app/README.md index 9e6910bb2..98b1240c9 100644 --- a/packages/tslint-config-react-app/README.md +++ b/packages/tslint-config-react-app/README.md @@ -18,8 +18,10 @@ To use in `create-react-app` we overridden several rules to make it compatible w * jsx-self-close, want linting on jsx * member-access, everything that has no access modifier is public implicitly, so no need to specify public again * missing-jsdoc, not useful for an application, it would be for a library +* no-any, not everything has to be to typed to allow for incrementally introduction of types for eg. 3rd party libraries * no-relative-imports, not practical for an application, it would be for a library because it has a package name * no-for-in-array, tslint in create-react-app does not do typecheck +* no-reserved-keywords, redux requires `type` keyword for a action, the rule doesn't allow us to whitelist `type` so we disabled whole rule * no-unused-variable:[true, "react"], allow React to be marked used by jsx tags * restrict-plus-operands, tslint in create-react-app does not do typecheck * quotemark diff --git a/packages/tslint-config-react-app/package.json b/packages/tslint-config-react-app/package.json index d54334024..d2618b371 100644 --- a/packages/tslint-config-react-app/package.json +++ b/packages/tslint-config-react-app/package.json @@ -1,6 +1,6 @@ { "name": "@nlesc/tslint-config-react-app", - "version": "1.0.0", + "version": "1.0.1", "description": "TSLint configuration used by Create React App", "main": "tslint.json", "scripts": { diff --git a/packages/tslint-config-react-app/tslint.json b/packages/tslint-config-react-app/tslint.json index a7bf89be7..11be50246 100644 --- a/packages/tslint-config-react-app/tslint.json +++ b/packages/tslint-config-react-app/tslint.json @@ -13,8 +13,10 @@ "jsx-self-close": true, "member-access": false, "missing-jsdoc": false, + "no-any": false, "no-relative-imports": false, "no-for-in-array": false, + "no-reserved-keywords": false, "no-unused-variable": [true, "react"], "restrict-plus-operands": false, "quotemark": [ -- GitLab From 0fa48f278772c41133024eff7cc4e78091c6236a Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 16:25:00 +0100 Subject: [PATCH 57/65] added tl;dr section stub --- development-setup.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/development-setup.md b/development-setup.md index 8f79ef54e..3c86367b9 100644 --- a/development-setup.md +++ b/development-setup.md @@ -1,6 +1,14 @@ -# Description of the development setup for https://github.com/NLeSC/create-react-app +# Development setup for https://github.com/NLeSC/create-react-app +## TL;DR / long story short + +``` +TODO <something here> +``` + +## long story long + A user who just wants to automatically generate an initial setup for a React app could do so by installing the ``create-react-app`` generator as follows: ``` -- GitLab From 85b9783615c3f9b70ad6eecefa833fbb32ec2e66 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:07:31 +0100 Subject: [PATCH 58/65] added tldr section content --- development-setup.md | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/development-setup.md b/development-setup.md index 3c86367b9..c6405c12d 100644 --- a/development-setup.md +++ b/development-setup.md @@ -1,12 +1,28 @@ -# Development setup for https://github.com/NLeSC/create-react-app +# Development setup +(for https://github.com/NLeSC/create-react-app) -## TL;DR / long story short + +## long story short ``` -TODO <something here> +npm install -g create-react-app +npm install -g verdaccio +verdaccio +npm set registry http://localhost:4873 +git clone https://github.com/NLeSC/create-react-app.git +cd create-react-app/packages/react-scripts +<make changes> +npm version <major|minor|patch|...> +npm adduser --registry http://localhost:4873/ +npm publish +cd <somewhere else> +create-react-app my-app --scripts-version @nlesc/react-scripts + ``` + + ## long story long A user who just wants to automatically generate an initial setup for a React app -- GitLab From c2b782ae2ea45e342624b8d5964f85700741b396 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:08:39 +0100 Subject: [PATCH 59/65] - expanded the longer explanation part of the development setup; - added explanation of how to add a user to npm registry - some additional smaller corrections --- development-setup.md | 86 +++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/development-setup.md b/development-setup.md index c6405c12d..aa607dbfa 100644 --- a/development-setup.md +++ b/development-setup.md @@ -41,53 +41,35 @@ This will create a directory ``your-app-name`` that contains a complete setup fo developing the newly created React app, including testing, code coverage generation, bundling, minification, incremental buidling, linting, etc. - Note that the above uses the ``npm`` registry at ``https://registry.npmjs.org/``. Now let's say you'd want to make changes to the template used to generate new apps, for example because you want new apps to be in TypeScript instead of the default JavaScript. For this, it is useful to run your own, local ``npm`` registry with hardly anything in it. You can do so with the following setup: -First ``npm install`` the package ``sinopia2``: +First ``npm install`` the package ``verdaccio``: ``` -npm installl -g sinopia2 +npm install -g verdaccio ``` Check to see if it works: ``` -sinopia -``` -Make a note of the name of the YAML config file. Mine is at -``~/.config/sinopia/config.yaml``. - -(Ctrl-C to end) - -Now edit the config file as follows. Near the bottom of the section marked -``packages`` there is a line: -``` -proxy:npmjs -``` -which is used for retrieving any packages missing from sinopia's ``npm`` registry. -Such packages are downloaded from the registry at ``https://registry.npmjs.org/`` -instead. - -However, note that there are two parts to the ``packages`` section. The proxy -line is in the ``'*':`` part. In order for proxying to work for scoped packages -as well as non-scoped packages, we need to add it to the ``'@*/*':`` part. - -Add the line and start ``sinopia`` again: -``` -sinopia +verdaccio ``` -``sinopia`` should tell you where its registry lives. Mine is at +``verdaccio`` should tell you where its registry lives. Mine is at ``http://localhost:4873/``. We will now tell ``npm`` to use the local -``sinopia`` registry instead of ``http://registry.npmjs.com``, as follows: +``verdaccio`` registry instead of ``http://registry.npmjs.com``, as follows: ``` npm set registry http://localhost:4873 ``` +If you want to return to the normal setup at a later point in time, you can do +so with: +``` +npm set registry https://registry.npmjs.com +``` Let's say you now want to make some changes to the ``create-react-app`` generator application. First get the source code of ``create-react-app`` using @@ -99,32 +81,56 @@ git clone https://github.com/NLeSC/create-react-app.git Any changes you make will likely be in one of ``create-react-app``'s consituent packages, which are located at ``create-react-app/packages``. Each of its -subdirectories is a separate ``npm`` package. Let's say you want to make changes to -the App template from ``create-react-app/packages/react-scripts/template/src``. +subdirectories is a separate ``npm`` package. Let's say you want to make changes +to the App template from ``create-react-app/packages/react-scripts/template/src``. ``` cd create-react-app/packages/react-scripts/template/src <make changes> ``` -Now publish your changes to the ``sinopia`` registry as follows. Walk up the -directory tree until you find a ``package.json``. You should find one in ``create-react-app/packages/react-scripts/``. Look up the value for ``name``. -This will be the name the packaged is published under. For me, it's -``@nlesc/react-scripts``. Now publish the package to sinopia: +Before publishing your changes, you need to: +1. increment the semantic versioning of the package +1. add yourself as a user to verdaccio's npm registry server + +Let's first check what the current semantic version number is, as follows. Walk +up the directory tree until you find a ``package.json``. You should find one in +``create-react-app/packages/react-scripts/``. Look up the value for ``version``. +Now go back to the terminal and use ``npm version patch`` to increment the patch +part of the semantic version number. The 'patch' part of the +version value in package.json should have been incremented (reload your editor +if necessary). + +Now let's add a user to verdaccio, as follows: +``` +npm adduser --registry http://localhost:4873/ +``` +This will ask you to enter a user name, password, and e-mail address, which will +be stored in verdaccio. It doesn't really matter what you enter on any of the +three questions. + + +Now look up the value for ``name`` in package.json. This will be the name the +package is published under. For me, it's ``@nlesc/react-scripts``. + +Verify that verdaccio is the active npm registry with ``npm get registry``, and +that verdaccio is in fact up and running, then publish the package to verdaccio +with: -TODO you may need to have added an npm user to the repo for this next step -to work. ``` npm publish ``` +You can point your browser to http://localhost:4873/ to get an overview of +packages that are present in verdaccio's registry. + Now when we want to test if the new version of ``@nlesc/react-scripts`` does what we want it to do, we can ``cd`` to some other place, let's say ``~/tmp``: ``` cd ~/tmp ``` -``npm install`` ``@nlesc/react-scripts`` locally, using sinopia's repo: +``npm install`` ``@nlesc/react-scripts`` locally (still using verdaccio's repo): ``` npm install @nlesc/react-scripts ``` @@ -133,8 +139,8 @@ You can now inspect the package at ``~/tmp/node_modules/@nlesc/react-scripts/``. The local install (``npm install`` without the ``-g`` flag) makes it a little easier to remove the ``node_modules`` directory when additional changes have -been made to the package, and those changes have been -``npm publish``'ed to the sinopia repository. +been made to the package, and those changes have been ``npm publish``'ed to the +verdaccio registry. Now create a new app using the updated generator as follows: @@ -143,7 +149,7 @@ cd ~/tmp # or wherever you want the new app to be create-react-app the-new-app --scripts-version @nlesc/react-scripts ``` This uses the globally installed ``create-react-app``, but with the custom -version of ``react-scripts``, namely @nlesc/react-scripts from sinopia. +version of ``react-scripts``, namely ``@nlesc/react-scripts`` from verdaccio. -- GitLab From b1755ce0a541138b7360a6a2350305ef3cce5a5d Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:13:30 +0100 Subject: [PATCH 60/65] Update development-setup.md --- development-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development-setup.md b/development-setup.md index aa607dbfa..7de95378d 100644 --- a/development-setup.md +++ b/development-setup.md @@ -73,7 +73,7 @@ npm set registry https://registry.npmjs.com Let's say you now want to make some changes to the ``create-react-app`` generator application. First get the source code of ``create-react-app`` using -nlesc's fork. I'm checking out the source code into ``~/github/nlesc/: +nlesc's fork. I'm checking out the source code into ``~/github/nlesc/``: ``` cd ~/github/nlesc/ git clone https://github.com/NLeSC/create-react-app.git -- GitLab From 0cf26e948348c896153e1c05b3b54fbbbd016779 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:14:02 +0100 Subject: [PATCH 61/65] Update development-setup.md --- development-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development-setup.md b/development-setup.md index 7de95378d..cd9e55118 100644 --- a/development-setup.md +++ b/development-setup.md @@ -79,7 +79,7 @@ cd ~/github/nlesc/ git clone https://github.com/NLeSC/create-react-app.git ``` -Any changes you make will likely be in one of ``create-react-app``'s consituent +Any changes you make will likely be in one of ``create-react-app``'s constituent packages, which are located at ``create-react-app/packages``. Each of its subdirectories is a separate ``npm`` package. Let's say you want to make changes to the App template from ``create-react-app/packages/react-scripts/template/src``. -- GitLab From ede4c7daa5c20b7e7d5d8f64f56a28d30b670e49 Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:15:46 +0100 Subject: [PATCH 62/65] Update development-setup.md --- development-setup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/development-setup.md b/development-setup.md index cd9e55118..772330fc5 100644 --- a/development-setup.md +++ b/development-setup.md @@ -90,6 +90,7 @@ cd create-react-app/packages/react-scripts/template/src ``` Before publishing your changes, you need to: + 1. increment the semantic versioning of the package 1. add yourself as a user to verdaccio's npm registry server -- GitLab From c0ebc14eda5edde73bea977ef93947050fb04b3d Mon Sep 17 00:00:00 2001 From: "Jurriaan H. Spaaks" <j.spaaks@esciencecenter.nl> Date: Wed, 9 Nov 2016 17:42:39 +0100 Subject: [PATCH 63/65] Update development-setup.md --- development-setup.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/development-setup.md b/development-setup.md index 772330fc5..bccdf05b8 100644 --- a/development-setup.md +++ b/development-setup.md @@ -44,10 +44,13 @@ bundling, minification, incremental buidling, linting, etc. Note that the above uses the ``npm`` registry at ``https://registry.npmjs.org/``. Now let's say you'd want to make changes to the template used to generate new apps, for example because you want new apps to be in TypeScript instead of the -default JavaScript. For this, it is useful to run your own, local ``npm`` registry -with hardly anything in it. You can do so with the following setup: +default JavaScript. For this, it is useful to run your own, local ``npm`` registry +using [verdaccio](https://github.com/verdaccio/verdaccio). Verdaccio sits between +you and https://registry.npmjs.com. It lets you publish development versions of +your npm package to the local, private repo, while still being able to retrieve +any other packages from the 'normal' registry at npmjs. -First ``npm install`` the package ``verdaccio``: +Install verdaccio with: ``` npm install -g verdaccio -- GitLab From d58442c89998bc6dfb73fbd8441d4499826c5bdd Mon Sep 17 00:00:00 2001 From: Maarten van Meersbergen <m.vanmeersbergen@esciencecenter.nl> Date: Fri, 11 Nov 2016 10:42:39 +0100 Subject: [PATCH 64/65] Update development-setup.md --- development-setup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/development-setup.md b/development-setup.md index bccdf05b8..062b12587 100644 --- a/development-setup.md +++ b/development-setup.md @@ -16,6 +16,7 @@ cd create-react-app/packages/react-scripts npm version <major|minor|patch|...> npm adduser --registry http://localhost:4873/ npm publish +<make sure to publish in the tslint-config-react-app subdir as well> cd <somewhere else> create-react-app my-app --scripts-version @nlesc/react-scripts -- GitLab From cb355249450ab8f072426b92e9ae27c09fe5ae80 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven <s.verhoeven@esciencecenter.nl> Date: Mon, 14 Nov 2016 16:55:03 +0100 Subject: [PATCH 65/65] Using ts-jest coverageprocessor and code of its preprocesser. Refs #17 --- .../react-scripts/config/jest/transform.js | 73 +++++++++++++------ packages/react-scripts/package.json | 1 + .../react-scripts/utils/createJestConfig.js | 18 +++-- 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/packages/react-scripts/config/jest/transform.js b/packages/react-scripts/config/jest/transform.js index 736f0cbb4..8f7e381c2 100644 --- a/packages/react-scripts/config/jest/transform.js +++ b/packages/react-scripts/config/jest/transform.js @@ -6,39 +6,66 @@ * of patent rights can be found in the PATENTS file in the same directory. */ +// This file is a merger between the original transform.js and ts-jest/dist/preprocessor.js (https://github.com/kulshekhar/ts-jest/blob/e1f95e524ed62091736f70abf63530f1f107ec03/src/preprocessor.ts) +// The preprocessor from ts-jest could not be used directly, +// because it did not use babel and +// could not get configuration from the right place (../utils/createJestConfig.js) +// instead it was retrieved from of argv which was incomplete + const babelJest = require('babel-jest'); const tsc = require('typescript'); +const glob = require('glob-all'); +const nodepath = require('path'); +const tsJestUtils = require('ts-jest/dist/utils'); +const getPackageRoot = require('jest-util').getPackageRoot; +const root = getPackageRoot(); const babelTransformer = babelJest.createTransformer({ presets: [require.resolve('babel-preset-react-app')] }); -// TODO load tsconfig.json in created app instead of duplicating tsconfig.compilerOptions here -const compilerOptions = { - // Overwrite module - // Jest gives `SyntaxError: Unexpected token import` error when ES6 module are emitted - // module: tsc.ModuleKind.ES6, - module: tsc.ModuleKind.CommonJS, - // Overwrite jsx - // Expected Babel transformer to convert jsx to js - // but Jest gives `SyntaxError: Unexpected token <` error when set to Preserve - // jsx: tsc.JsxEmit.Preserve, - jsx: tsc.JsxEmit.React, - target: tsc.ScriptTarget.ES6, - moduleResolution: tsc.ModuleResolutionKind.NodeJs, -}; +function initializeCache(config) { + const collectCoverage = config.collectCoverage; + const coverageDirectory = config.coverageDirectory; + const coverageReporters = config.coverageReporters; + const collectCoverageFrom = config.collectCoverageFrom; + const testResultsProcessor = config.testResultsProcessor; + global.__ts_coverage__cache__ = {}; + global.__ts_coverage__cache__.sourceCache = {}; + global.__ts_coverage__cache__.coverageConfig = { collectCoverage: collectCoverage, coverageDirectory: coverageDirectory, coverageReporters: coverageReporters }; + global.__ts_coverage__cache__.coverageCollectFiles = + collectCoverage && + testResultsProcessor && + collectCoverageFrom && + collectCoverageFrom.length ? + glob.sync(collectCoverageFrom).map(function (x) { return nodepath.resolve(root, x); }) : []; +} + +function tsProcess(src, path, config) { + if (path.endsWith('.ts') || path.endsWith('.tsx')) { + if (config.testResultsProcessor && !global.__ts_coverage__cache__) { + // initialize only once + initializeCache(config); + } + var transpiled = tsc.transpileModule(src, { + compilerOptions: tsJestUtils.getTSConfig(config.globals, config.collectCoverage), + fileName: path + }); + if (global.__ts_coverage__cache__) { + if (!config.testRegex || !path.match(config.testRegex)) { + global.__ts_coverage__cache__.sourceCache[path] = transpiled.outputText; + } + } + var modified = "require('ts-jest').install();" + transpiled.outputText; + return modified; + } + return src; +} // transpile the source with TypeScript, if needed, and then with Babel module.exports = { - process(src, path) { - if (path.endsWith('.ts') || path.endsWith('.tsx')) { - src = tsc.transpile( - src, - compilerOptions, - path, - [] - ); - } + process(src, path, config) { + src = tsProcess(src, path, config); return babelTransformer.process(src, path); }, }; diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 42d751fb7..7c84d945b 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -66,6 +66,7 @@ "style-loader": "0.13.1", "tslint": "^3.15.1", "tslint-loader": "^2.1.5", + "ts-jest": "^0.1.13", "typescript": "^2.0.7", "url-loader": "0.5.7", "webpack": "1.13.2", diff --git a/packages/react-scripts/utils/createJestConfig.js b/packages/react-scripts/utils/createJestConfig.js index 0d743a25e..8bbb721c8 100644 --- a/packages/react-scripts/utils/createJestConfig.js +++ b/packages/react-scripts/utils/createJestConfig.js @@ -11,12 +11,20 @@ const pathExists = require('path-exists'); const paths = require('../config/paths'); +const path = require('path'); module.exports = (resolve, rootDir, isEjecting) => { // Use this instead of `paths.testsSetup` to avoid putting // an absolute filename into configuration after ejecting. const setupTestsFile = pathExists.sync(paths.testsSetup) ? '<rootDir>/src/setupTests.js' : undefined; + const compilerOptions = require(path.resolve('./tsconfig.json')).compilerOptions; + // Jest gives `SyntaxError: Unexpected token import` error when ES6 module are emitted + compilerOptions.module = "commonjs"; + // Expected Babel transformer to convert jsx to js + // but Jest gives `SyntaxError: Unexpected token <` error when set to preserve + compilerOptions.jsx = "react"; + const config = { collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], moduleFileExtensions: ['jsx', 'js', 'json', 'ts', 'tsx'], @@ -29,14 +37,14 @@ module.exports = (resolve, rootDir, isEjecting) => { testPathIgnorePatterns: ['<rootDir>/(build|docs|node_modules)/'], testEnvironment: 'node', testRegex: "(/__tests__/.*|\.(test|spec))\.(ts|tsx|js|jsx)$", + testResultsProcessor: require.resolve("ts-jest/coverageprocessor"), + scriptPreprocessor: resolve('config/jest/transform.js'), + globals: { + "__TS_CONFIG__": compilerOptions + } }; if (rootDir) { config.rootDir = rootDir; } - if (!isEjecting) { - // This is unnecessary after ejecting because Jest - // will just use .babelrc in the project folder. - config.scriptPreprocessor = resolve('config/jest/transform.js'); - } return config; }; -- GitLab