Skip to content

Commit b357c38

Browse files
committed
remove lodash
1 parent 5a51f42 commit b357c38

File tree

19 files changed

+194
-19319
lines changed

19 files changed

+194
-19319
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44

55
## [0.7.0] - in progress
6-
6+
- move to '[email protected]'
77
- much improved setup ui & checks
88
- check Node, NPM versions
99
- Stepper UI
10+
- remove 'lodash' dependency
1011

1112
## [0.6.0] - 2016-04-01
1213
- fixes

lib/actions/actions.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use strict";
22
var actionTypes_1 = require('./actionTypes');
33
var store_1 = require('../store/store');
4-
var package_1 = require('../services/package');
4+
var tutorial_package_1 = require('../services/tutorial-package');
55
function setProject() {
66
return { type: actionTypes_1.SET_PROJECT };
77
}
@@ -23,7 +23,7 @@ function setPosition(position) {
2323
}
2424
exports.setPosition = setPosition;
2525
function loadTutorial(tutorial) {
26-
package_1.default.selectPackage(tutorial.name);
26+
tutorial_package_1.default.selectPackage(tutorial.name);
2727
store_1.store.dispatch(setProject());
2828
store_1.store.dispatch(setPosition({ chapter: 0, page: 0 }));
2929
store_1.store.dispatch(setProgress());

lib/actions/page-actions.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
"use strict";
22
var actionTypes_1 = require('./actionTypes');
33
var store_1 = require('../store/store');
4-
var package_1 = require('../services/package');
5-
var lodash_1 = require('lodash');
4+
var tutorial_package_1 = require('../services/tutorial-package');
65
function setPage(selectedPosition) {
76
if (selectedPosition === void 0) { selectedPosition = { chapter: 0, page: 0 }; }
87
if (selectedPosition.completed) {
98
return { type: actionTypes_1.SET_ROUTE, payload: { route: 'final' } };
109
}
11-
var page = package_1.default.getPage(selectedPosition);
12-
var tasks = package_1.default.getTasks(selectedPosition);
13-
var taskTests = lodash_1.flatten(tasks.map(function (task) { return task.tests || []; }));
10+
var page = tutorial_package_1.default.getPage(selectedPosition);
11+
var tasks = tutorial_package_1.default.getTasks(selectedPosition);
12+
var taskTests = [].concat.apply([], tasks.map(function (task) { return task.tests || []; }));
1413
var actions = tasks.map(function (task) { return task.actions || []; });
1514
return { type: actionTypes_1.SET_PAGE, payload: { page: page, tasks: tasks, position: selectedPosition, taskTests: taskTests, actions: actions } };
1615
}
1716
exports.setPage = setPage;
1817
function nextPage() {
1918
var position = store_1.store.getState().position;
20-
var nextPosition = package_1.default.getNextPosition(position);
19+
var nextPosition = tutorial_package_1.default.getNextPosition(position);
2120
return setPage(nextPosition);
2221
}
2322
exports.nextPage = nextPage;

lib/reducers/editor-actions/editor-actions.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use strict";
22
var actionTypes_1 = require('../../actions/actionTypes');
3-
var lodash_1 = require('lodash');
43
var actions_1 = require('./actions');
54
function handleEditorActions(actionArray) {
65
if (actionArray && actionArray.length) {
@@ -21,7 +20,9 @@ function editorActionsReducer(editorActions, action) {
2120
actions = action.payload.actions;
2221
var nextTaskPosition = action.payload.result.taskPosition;
2322
if (nextTaskPosition > currentTaskPosition) {
24-
lodash_1.times(handleEditorActions(actions.shift()), nextTaskPosition - currentTaskPosition);
23+
for (var i = 0; i < nextTaskPosition - currentTaskPosition; i++) {
24+
handleEditorActions(actions.shift());
25+
}
2526
currentTaskPosition = nextTaskPosition;
2627
}
2728
return actions;

lib/reducers/progress/progress.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
var actionTypes_1 = require('../../actions/actionTypes');
3-
var package_1 = require('../../services/package');
3+
var tutorial_package_1 = require('../../services/tutorial-package');
44
var defaultProgress = {
55
completed: false,
66
chapters: [{
@@ -18,7 +18,7 @@ function progressReducer(progress, action) {
1818
if (progress === void 0) { progress = defaultProgress; }
1919
switch (action.type) {
2020
case actionTypes_1.SET_PROGRESS:
21-
return package_1.default.getProgress();
21+
return tutorial_package_1.default.getProgress();
2222
case actionTypes_1.PAGE_COMPLETE:
2323
var position = action.payload.position;
2424
progress.chapters[position.chapter].pages[position.page].completed = true;

lib/reducers/project/project.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
var actionTypes_1 = require('../../actions/actionTypes');
3-
var package_1 = require('../../services/package');
3+
var tutorial_package_1 = require('../../services/tutorial-package');
44
var defaultProject = {
55
title: '',
66
description: ''
@@ -9,7 +9,7 @@ function projectReducer(project, action) {
99
if (project === void 0) { project = defaultProject; }
1010
switch (action.type) {
1111
case actionTypes_1.SET_PROJECT:
12-
return package_1.default.getProject();
12+
return tutorial_package_1.default.getProject();
1313
default:
1414
return project;
1515
}

lib/services/root-package.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use strict";
2+
var fs_1 = require('fs');
3+
var exists_1 = require('./exists');
4+
var path_1 = require('path');
5+
var RootPackageService = (function () {
6+
function RootPackageService() {
7+
}
8+
RootPackageService.prototype.getRootPackage = function () {
9+
var pathToPackageJson = path_1.join(window.coderoad.dir, 'package.json');
10+
if (exists_1.fileExists(pathToPackageJson)) {
11+
return JSON.parse(fs_1.readFileSync(pathToPackageJson, 'utf8'));
12+
}
13+
return null;
14+
};
15+
return RootPackageService;
16+
}());

lib/services/tutorial-package.js

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
"use strict";
2+
var path_1 = require('path');
3+
var actions_1 = require('../actions/actions');
4+
var store_1 = require('../store/store');
5+
function configTestString(config, name, test) {
6+
if (window.coderoad.win) {
7+
test = test.split('/').join('\\');
8+
}
9+
if (config.testDir) {
10+
test = path_1.join(window.coderoad.dir, 'node_modules', name, config.testDir, test);
11+
}
12+
else {
13+
test = path_1.join(window.coderoad.dir, 'node_modules', name, test);
14+
}
15+
if (config.testSuffix) {
16+
test += config.testSuffix;
17+
}
18+
return test;
19+
}
20+
var TutorialPackageService = (function () {
21+
function TutorialPackageService() {
22+
this.name = '';
23+
this.data = {
24+
project: {},
25+
chapters: []
26+
};
27+
this.packageJson = null;
28+
}
29+
TutorialPackageService.prototype.selectPackage = function (name) {
30+
var packagePath = path_1.join(window.coderoad.dir, 'node_modules', name);
31+
this.packageJson = require(path_1.join(packagePath, 'package.json'));
32+
store_1.store.dispatch(actions_1.setGlobals(this.packageJson));
33+
this.data = require(path_1.join(packagePath, this.packageJson.main));
34+
this.name = name;
35+
};
36+
TutorialPackageService.prototype.page = function (_a) {
37+
var chapter = _a.chapter, page = _a.page;
38+
return this.data.chapters[chapter].pages[page];
39+
};
40+
TutorialPackageService.prototype.getPackage = function () {
41+
return this.packageJson;
42+
};
43+
TutorialPackageService.prototype.configTaskTests = function (tasks) {
44+
var _this = this;
45+
var config = this.packageJson.config;
46+
return !tasks ? [] : tasks.map(function (task) {
47+
if (task.tests) {
48+
task.tests = task.tests.map(function (test) {
49+
if (typeof test === 'string') {
50+
return configTestString(config, _this.name, test);
51+
}
52+
else {
53+
console.error('Invalid task test', test);
54+
}
55+
});
56+
}
57+
return task;
58+
});
59+
};
60+
TutorialPackageService.prototype.getTasks = function (position) {
61+
var tasks = this.page(position).tasks || [];
62+
tasks = this.configTaskTests(tasks);
63+
return tasks;
64+
};
65+
TutorialPackageService.prototype.getPage = function (position) {
66+
var _a = this.page(position), title = _a.title, description = _a.description, onPageComplete = _a.onPageComplete, completed = _a.completed;
67+
return {
68+
title: title, description: description, onPageComplete: onPageComplete, completed: completed || false
69+
};
70+
};
71+
TutorialPackageService.prototype.getSavedPosition = function () {
72+
return { chapter: 0, page: 0 };
73+
};
74+
TutorialPackageService.prototype.getSavedRoute = function () {
75+
return 'progress';
76+
};
77+
TutorialPackageService.prototype.getNextPosition = function (_a) {
78+
var chapter = _a.chapter, page = _a.page;
79+
var chapters = this.data.chapters;
80+
if (page < chapters[chapter].pages.length - 1) {
81+
return { chapter: chapter, page: page + 1 };
82+
}
83+
else if (chapter < chapters.length - 1) {
84+
return { chapter: chapter + 1, page: 0 };
85+
}
86+
else {
87+
store_1.store.dispatch(actions_1.projectComplete());
88+
return { chapter: chapter, page: page, completed: true };
89+
}
90+
};
91+
TutorialPackageService.prototype.getProject = function () {
92+
return this.data.project;
93+
};
94+
TutorialPackageService.prototype.getProgress = function () {
95+
var chapters = this.data.chapters;
96+
return {
97+
completed: false,
98+
chapters: !chapters ? [] : chapters.map(function (_a) {
99+
var title = _a.title, description = _a.description, completed = _a.completed, pages = _a.pages;
100+
return {
101+
title: title, description: description, completed: completed || false,
102+
pages: !pages ? [] : pages.map(function (page) {
103+
return {
104+
title: page.title,
105+
description: page.description,
106+
completed: page.completed || false
107+
};
108+
})
109+
};
110+
})
111+
};
112+
};
113+
return TutorialPackageService;
114+
}());
115+
Object.defineProperty(exports, "__esModule", { value: true });
116+
exports.default = new TutorialPackageService();

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
"dependencies": {
4141
"classnames": "2.2.3",
4242
"highlights": "1.3.1",
43-
"lodash": "4.11.1",
4443
"marked": "0.3.5",
4544
"material-ui": "0.15.0-beta.1",
4645
"react": "15.0.1",

src/actions/actions.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
LOG_MESSAGE
55
} from './actionTypes';
66
import {store} from '../store/store';
7-
import Package from '../services/package';
7+
import TutorialPackage from '../services/tutorial-package';
88

99
/* Project */
1010
export function setProject(): CR.Action {
@@ -29,7 +29,7 @@ export function setPosition(position: CR.Position): CR.Action {
2929
}
3030

3131
export function loadTutorial(tutorial: CR.Tutorial): void {
32-
Package.selectPackage(tutorial.name);
32+
TutorialPackage.selectPackage(tutorial.name);
3333
store.dispatch(setProject());
3434
store.dispatch(setPosition({chapter: 0, page: 0}));
3535
store.dispatch(setProgress());

src/actions/page-actions.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
import {SET_ROUTE, SET_PAGE} from './actionTypes';
22
import {store} from '../store/store';
3-
import Package from '../services/package';
4-
import {flatten} from 'lodash';
3+
import TutorialPackage from '../services/tutorial-package';
54

65
export function setPage(selectedPosition: CR.Position = { chapter: 0, page: 0 }): CR.Action {
76
if (selectedPosition.completed) {
87
return { type: SET_ROUTE, payload: { route: 'final'} };
98
}
10-
const page: CR.Page = Package.getPage(selectedPosition);
11-
const tasks: CR.Task[] = Package.getTasks(selectedPosition);
12-
const taskTests: CR.TaskTest[] = flatten(tasks.map((task) => task.tests || []));
9+
const page: CR.Page = TutorialPackage.getPage(selectedPosition);
10+
const tasks: CR.Task[] = TutorialPackage.getTasks(selectedPosition);
11+
const taskTests: CR.TaskTest[] = [].concat.apply([], tasks.map((task) => task.tests || []));
1312
const actions: string[][] = tasks.map((task: CR.Task) => task.actions || []);
1413
return { type: SET_PAGE, payload: { page, tasks, position: selectedPosition, taskTests, actions } };
1514
}
1615

1716
export function nextPage(): CR.Action {
1817
const position: CR.Position = store.getState().position;
19-
const nextPosition: CR.Position = Package.getNextPosition(position);
18+
const nextPosition: CR.Position = TutorialPackage.getNextPosition(position);
2019
return setPage(nextPosition);
2120
}

src/reducers/checks/action-setup.ts

-7
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,3 @@ export function createPackageJson(): Promise<void> {
2828
export function openDirectory(): void {
2929
openFolder();
3030
}
31-
32-
// export function installTutorial(): void {
33-
// commandLine('npm', 'install --save-dev coderoad-functional-school && npm install').then((res) => {
34-
// console.log(res);
35-
// store.dispatch(Action.verifySetup());
36-
// });
37-
// }

src/reducers/editor-actions/editor-actions.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {SET_PAGE, TEST_RESULT} from '../../actions/actionTypes';
2-
import {times} from 'lodash';
32
import {editorActions} from './actions';
43

54
function handleEditorActions(actionArray: string[]): void {
@@ -26,7 +25,9 @@ export default function editorActionsReducer(editorActions = [], action: CR.Acti
2625
let nextTaskPosition = action.payload.result.taskPosition;
2726
if (nextTaskPosition > currentTaskPosition) {
2827
// run actions for each task position passed
29-
times(handleEditorActions(actions.shift()), nextTaskPosition - currentTaskPosition);
28+
for (let i = 0; i < nextTaskPosition - currentTaskPosition; i++) {
29+
handleEditorActions(actions.shift());
30+
}
3031
currentTaskPosition = nextTaskPosition;
3132
}
3233
return actions;

src/reducers/progress/progress.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
SET_PROGRESS, PAGE_COMPLETE, CHAPTER_COMPLETE, PROJECT_COMPLETE
33
} from '../../actions/actionTypes';
4-
import Package from '../../services/package';
4+
import TutorialPackage from '../../services/tutorial-package';
55

66
const defaultProgress: CR.Progress = {
77
completed: false,
@@ -21,7 +21,7 @@ export default function progressReducer(progress = defaultProgress,
2121
action: CR.Action): CR.Progress {
2222
switch (action.type) {
2323
case SET_PROGRESS:
24-
return Package.getProgress();
24+
return TutorialPackage.getProgress();
2525
case PAGE_COMPLETE:
2626
const position = action.payload.position;
2727
progress.chapters[position.chapter].pages[position.page].completed = true;

src/reducers/project/project.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {SET_PROJECT} from '../../actions/actionTypes';
2-
import Package from '../../services/package';
2+
import TutorialPackage from '../../services/tutorial-package';
33

44
const defaultProject: CR.Project = {
55
title: '',
@@ -10,7 +10,7 @@ export default function projectReducer(project = defaultProject,
1010
action: CR.Action): CR.Project {
1111
switch (action.type) {
1212
case SET_PROJECT:
13-
return Package.getProject();
13+
return TutorialPackage.getProject();
1414
default:
1515
return project;
1616
}

src/services/root-package.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {readFileSync} from 'fs';
2+
import {fileExists} from './exists';
3+
import {join} from 'path';
4+
5+
class RootPackageService {
6+
getRootPackage(): PackageJson {
7+
const pathToPackageJson = join(window.coderoad.dir, 'package.json');
8+
if (fileExists(pathToPackageJson)) {
9+
return JSON.parse(readFileSync(pathToPackageJson, 'utf8'));
10+
}
11+
return null;
12+
}
13+
}

0 commit comments

Comments
 (0)