Skip to content

Commit 36db2bc

Browse files
committed
fixes, refactor for faster package loads
1 parent 81150fe commit 36db2bc

File tree

17 files changed

+91
-130
lines changed

17 files changed

+91
-130
lines changed

lib/actions/actions.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function setPosition(position) {
2323
}
2424
exports.setPosition = setPosition;
2525
function loadTutorial(tutorial) {
26-
tutorial_package_1.default.selectPackage(tutorial.name);
26+
tutorial_package_1.default.set(tutorial.name);
2727
store_1.store.dispatch(setProject());
2828
store_1.store.dispatch(setPosition({ chapter: 0, page: 0 }));
2929
store_1.store.dispatch(setProgress());
@@ -34,10 +34,6 @@ function toggleLog() {
3434
return { type: actionTypes_1.TOGGLE_LOG, payload: { open: open } };
3535
}
3636
exports.toggleLog = toggleLog;
37-
function logMessage(message) {
38-
return { type: actionTypes_1.LOG_MESSAGE, payload: { message: message } };
39-
}
40-
exports.logMessage = logMessage;
4137
var page_actions_1 = require('./page-actions');
4238
exports.setPage = page_actions_1.setPage;
4339
exports.nextPage = page_actions_1.nextPage;

lib/components/menu/menu.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ var MenuLink = (function (_super) {
3333
_super.apply(this, arguments);
3434
}
3535
MenuLink.prototype.render = function () {
36-
var _a = this.props, route = _a.route, title = _a.title;
37-
return React.createElement(MenuItem_1.default, {primaryText: title ? title : route, onTouchTap: this.props.routeTo.bind(route), key: route});
36+
var _a = this.props, route = _a.route, title = _a.title, routeTo = _a.routeTo;
37+
return React.createElement(MenuItem_1.default, {primaryText: title ? title : route, onTouchTap: routeTo.bind(this, route), key: route});
3838
};
3939
MenuLink = __decorate([
4040
react_redux_1.connect(null, function (dispatch) {
@@ -85,7 +85,6 @@ var AppMenu = (function (_super) {
8585
AppMenu = __decorate([
8686
react_redux_1.connect(null, function (dispatch) {
8787
return {
88-
routeToProgress: function () { return dispatch(actions_1.setRoute('progress')); },
8988
routeToPage: function () {
9089
var position = _this.props.position;
9190
dispatch(actions_1.setPage(position));

lib/reducers/checks/check-setup.js

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22
var check_tutorials_1 = require('../tutorials/check-tutorials');
3+
var root_package_1 = require('../../services/root-package');
34
function hasDirectory() {
45
return !!window.coderoad.dir;
56
}
@@ -9,15 +10,8 @@ function hasPackageJson() {
910
}
1011
exports.hasPackageJson = hasPackageJson;
1112
function hasTutorialDep() {
12-
var packageJson = hasPackageJson ? check_tutorials_1.loadRootPackageJson() : null;
13-
return !!packageJson && _tutorialInstalled(packageJson.dependencies) ||
14-
_tutorialInstalled(packageJson.devDependencies);
13+
var tutorials = root_package_1.default.getTutorials();
14+
console.log(tutorials);
15+
return !!tutorials && tutorials.length > 0;
1516
}
1617
exports.hasTutorialDep = hasTutorialDep;
17-
function _hasKeys(obj) {
18-
return Object.keys(obj).length > 0;
19-
}
20-
function _tutorialInstalled(location) {
21-
return !!location && _hasKeys(location) &&
22-
check_tutorials_1.searchForTutorials(location).length > 0;
23-
}

lib/reducers/checks/verify.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
"use strict";
22
var check_system_1 = require('./check-system');
3-
var check_setup_1 = require('./check-setup');
3+
var root_package_1 = require('../../services/root-package');
44
var result = function (x) { return x; };
55
function allTrue(obj) {
66
return Object.values(obj).every(function (x) { return x === true; });
77
}
8+
function hasTutorialDep() {
9+
var tutorials = root_package_1.default.getTutorials();
10+
return !!tutorials && tutorials.length > 0;
11+
}
812
function verifySetup() {
9-
var dir = !!check_setup_1.hasDirectory();
13+
var dir = !!window.coderoad.dir;
1014
var packageJson = false;
1115
var tutorial = false;
16+
root_package_1.default.set();
1217
if (dir) {
13-
packageJson = !!check_setup_1.hasPackageJson();
18+
packageJson = !!root_package_1.default.get();
1419
}
1520
if (dir && packageJson) {
16-
tutorial = check_setup_1.hasTutorialDep();
21+
tutorial = hasTutorialDep();
1722
}
1823
var checks = {
1924
system: {

lib/reducers/tutorials/check-tutorials.js

+2-14
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,8 @@
22
var path_1 = require('path');
33
var fs_1 = require('fs');
44
var exists_1 = require('../../services/exists');
5+
var root_package_1 = require('../../services/root-package');
56
var tutorialError = 'This is an error with the tutorial itself';
6-
function packageJsonExists() {
7-
var pathToPackageJson = path_1.join(window.coderoad.dir, 'package.json');
8-
return exists_1.fileExists(pathToPackageJson);
9-
}
10-
exports.packageJsonExists = packageJsonExists;
11-
function loadRootPackageJson() {
12-
var pathToPackageJson = path_1.join(window.coderoad.dir, 'package.json');
13-
if (exists_1.fileExists(pathToPackageJson)) {
14-
return JSON.parse(fs_1.readFileSync(pathToPackageJson, 'utf8'));
15-
}
16-
return null;
17-
}
18-
exports.loadRootPackageJson = loadRootPackageJson;
197
function _isTutorial(name) {
208
var pathToTutorialPackageJson = path_1.join(window.coderoad.dir, 'node_modules', name, 'package.json');
219
if (!exists_1.fileExists(pathToTutorialPackageJson)) {
@@ -52,7 +40,7 @@ function searchForTutorials(deps) {
5240
version: 'NOT INSTALLED'
5341
};
5442
}
55-
var packageJson = JSON.parse(fs_1.readFileSync(pathToTutorialPackageJson, 'utf8'));
43+
var packageJson = root_package_1.default.get();
5644
return {
5745
name: name,
5846
version: packageJson.version

lib/reducers/tutorials/tutorials.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
"use strict";
22
var actionTypes_1 = require('../../actions/actionTypes');
3-
var check_tutorials_1 = require('./check-tutorials');
43
var update_tutorial_1 = require('./update-tutorial');
4+
var root_package_1 = require('../../services/root-package');
55
function tutorialsReducer(tutorials, action) {
66
if (tutorials === void 0) { tutorials = []; }
77
switch (action.type) {
88
case actionTypes_1.UPDATE_TUTORIAL:
99
update_tutorial_1.updateTutorial(action.payload.name);
1010
case actionTypes_1.LOAD_TUTORIALS:
11-
var packageJson = check_tutorials_1.loadRootPackageJson();
12-
if (!!packageJson) {
13-
return [].concat(check_tutorials_1.searchForTutorials(packageJson.dependencies))
14-
.concat(check_tutorials_1.searchForTutorials(packageJson.devDependencies));
15-
}
16-
return [];
11+
return root_package_1.default.getTutorials();
1712
default:
1813
return tutorials;
1914
}

lib/services/root-package.js

+22-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,34 @@
22
var fs_1 = require('fs');
33
var exists_1 = require('./exists');
44
var path_1 = require('path');
5+
var check_tutorials_1 = require('../reducers/tutorials/check-tutorials');
56
var RootPackageService = (function () {
67
function RootPackageService() {
8+
this.packageJson = null;
79
}
8-
RootPackageService.prototype.getRootPackage = function () {
10+
RootPackageService.prototype.set = function () {
911
var pathToPackageJson = path_1.join(window.coderoad.dir, 'package.json');
1012
if (exists_1.fileExists(pathToPackageJson)) {
11-
return JSON.parse(fs_1.readFileSync(pathToPackageJson, 'utf8'));
13+
this.packageJson = JSON.parse(fs_1.readFileSync(pathToPackageJson, 'utf8'));
14+
}
15+
else {
16+
return null;
17+
}
18+
};
19+
RootPackageService.prototype.get = function () {
20+
return this.packageJson;
21+
};
22+
RootPackageService.prototype.getTutorials = function () {
23+
if (this.packageJson) {
24+
return ([]
25+
.concat(check_tutorials_1.searchForTutorials(this.packageJson.dependencies))
26+
.concat(check_tutorials_1.searchForTutorials(this.packageJson.devDependencies)));
27+
}
28+
else {
29+
return null;
1230
}
13-
return null;
1431
};
1532
return RootPackageService;
1633
}());
34+
Object.defineProperty(exports, "__esModule", { value: true });
35+
exports.default = new RootPackageService();

lib/services/tutorial-package.js

+4-10
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ var TutorialPackageService = (function () {
2626
};
2727
this.packageJson = null;
2828
}
29-
TutorialPackageService.prototype.selectPackage = function (name) {
29+
TutorialPackageService.prototype.get = function () {
30+
return this.packageJson;
31+
};
32+
TutorialPackageService.prototype.set = function (name) {
3033
var packagePath = path_1.join(window.coderoad.dir, 'node_modules', name);
3134
this.packageJson = require(path_1.join(packagePath, 'package.json'));
3235
store_1.store.dispatch(actions_1.setGlobals(this.packageJson));
@@ -37,9 +40,6 @@ var TutorialPackageService = (function () {
3740
var chapter = _a.chapter, page = _a.page;
3841
return this.data.chapters[chapter].pages[page];
3942
};
40-
TutorialPackageService.prototype.getPackage = function () {
41-
return this.packageJson;
42-
};
4343
TutorialPackageService.prototype.configTaskTests = function (tasks) {
4444
var _this = this;
4545
var config = this.packageJson.config;
@@ -68,12 +68,6 @@ var TutorialPackageService = (function () {
6868
title: title, description: description, onPageComplete: onPageComplete, completed: completed || false
6969
};
7070
};
71-
TutorialPackageService.prototype.getSavedPosition = function () {
72-
return { chapter: 0, page: 0 };
73-
};
74-
TutorialPackageService.prototype.getSavedRoute = function () {
75-
return 'progress';
76-
};
7771
TutorialPackageService.prototype.getNextPosition = function (_a) {
7872
var chapter = _a.chapter, page = _a.page;
7973
var chapters = this.data.chapters;

src/actions/actions.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
SET_PROJECT, SET_GLOBALS, VERIFY_SETUP,
3-
SET_PROGRESS, SET_POSITION, TOGGLE_LOG,
4-
LOG_MESSAGE
3+
SET_PROGRESS, SET_POSITION, TOGGLE_LOG
54
} from './actionTypes';
65
import {store} from '../store/store';
76
import TutorialPackage from '../services/tutorial-package';
@@ -29,7 +28,7 @@ export function setPosition(position: CR.Position): CR.Action {
2928
}
3029

3130
export function loadTutorial(tutorial: CR.Tutorial): void {
32-
TutorialPackage.selectPackage(tutorial.name);
31+
TutorialPackage.set(tutorial.name);
3332
store.dispatch(setProject());
3433
store.dispatch(setPosition({chapter: 0, page: 0}));
3534
store.dispatch(setProgress());
@@ -40,10 +39,6 @@ export function toggleLog(): CR.Action {
4039
return { type: TOGGLE_LOG, payload: { open } };
4140
}
4241

43-
export function logMessage(message: string): CR.Action {
44-
return { type: LOG_MESSAGE, payload: { message }};
45-
}
46-
4742

4843
/* Page */
4944
export {setPage, nextPage} from './page-actions';

src/components/menu/menu.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export class MenuLink extends React.Component<{
2525
}, {}> {
2626
render() {
2727
const {route, title, routeTo} = this.props;
28-
console.log(route);
2928
return <MenuItem primaryText={title ? title : route} onTouchTap={routeTo.bind(this, route)} key={route}/>;
3029
}
3130
}

src/reducers/checks/check-setup.ts

-24
This file was deleted.

src/reducers/checks/verify.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
import {npmMinVersion, nodeMinVersion} from './check-system';
2-
import {hasDirectory, hasPackageJson, hasTutorialDep} from './check-setup';
2+
// import {hasDirectory} from './check-setup';
3+
import RootPackage from '../../services/root-package';
34

45
const result = (x) => x;
56
function allTrue(obj: Object): boolean {
67
return Object.values(obj).every((x) => x === true);
78
}
89

10+
function hasTutorialDep(): boolean {
11+
const tutorials = RootPackage.getTutorials();
12+
return !!tutorials && tutorials.length > 0;
13+
}
14+
915
export default function verifySetup(): CR.Checks {
10-
let dir = !!hasDirectory();
16+
let dir = !!window.coderoad.dir;
1117
let packageJson = false;
1218
let tutorial = false;
1319

20+
RootPackage.set();
21+
1422
if (dir) {
15-
packageJson = !!hasPackageJson();
23+
packageJson = !!RootPackage.get();
1624
}
1725
if (dir && packageJson) {
1826
tutorial = hasTutorialDep();

src/reducers/tutorials/check-tutorials.ts

+3-15
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,11 @@ import {store} from '../../store/store';
22
import {join} from 'path';
33
import {readFileSync} from 'fs';
44
import {fileExists} from '../../services/exists';
5-
import {canUpdateTutorial} from './update-tutorial';
5+
// import {canUpdateTutorial} from './update-tutorial';
6+
import RootPackage from '../../services/root-package';
67

78
let tutorialError = 'This is an error with the tutorial itself';
89

9-
export function packageJsonExists(): boolean {
10-
const pathToPackageJson = join(window.coderoad.dir, 'package.json');
11-
return fileExists(pathToPackageJson);
12-
}
13-
14-
export function loadRootPackageJson(): PackageJson {
15-
const pathToPackageJson = join(window.coderoad.dir, 'package.json');
16-
if (fileExists(pathToPackageJson)) {
17-
return JSON.parse(readFileSync(pathToPackageJson, 'utf8'));
18-
}
19-
return null;
20-
}
21-
2210
function _isTutorial(name: string): boolean {
2311
// has package.json
2412
let pathToTutorialPackageJson = join(window.coderoad.dir, 'node_modules', name, 'package.json');
@@ -70,7 +58,7 @@ export function searchForTutorials(deps: Object): CR.Tutorial[] {
7058
};
7159
}
7260

73-
let packageJson: PackageJson = JSON.parse(readFileSync(pathToTutorialPackageJson, 'utf8'));
61+
let packageJson = RootPackage.get();
7462

7563
return {
7664
name,

src/reducers/tutorials/tutorials.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {UPDATE_TUTORIAL, LOAD_TUTORIALS} from '../../actions/actionTypes';
2-
import {loadRootPackageJson, searchForTutorials} from './check-tutorials';
32
import {updateTutorial} from './update-tutorial';
3+
import RootPackage from '../../services/root-package';
44

55
export default function tutorialsReducer(tutorials = [],
66
action: CR.Action): CR.Tutorial[] {
@@ -9,12 +9,7 @@ export default function tutorialsReducer(tutorials = [],
99
updateTutorial(action.payload.name);
1010
/* falls through */
1111
case LOAD_TUTORIALS:
12-
let packageJson: PackageJson = loadRootPackageJson();
13-
if (!!packageJson) {
14-
return [].concat(searchForTutorials(packageJson.dependencies))
15-
.concat(searchForTutorials(packageJson.devDependencies));
16-
}
17-
return [];
12+
return RootPackage.getTutorials();
1813
default:
1914
return tutorials;
2015
}

0 commit comments

Comments
 (0)