Skip to content

Commit 021a2b3

Browse files
committed
make ts config & typings available
1 parent 621561c commit 021a2b3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+12431
-52
lines changed

.npmignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
src
2+
tsconfig.json
3+
tsd.json
4+
tslint.json

lib/_base.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
var store_1=require("./store/store");exports.store=store_1.store,exports.initialState=store_1.initialState,exports.dispatch=store_1.dispatch;var reducer_1=require("./reducers/reducer");exports.reducer=reducer_1["default"];
1+
"use strict";
2+
var store_1 = require('./store/store');
3+
exports.store = store_1.store;
4+
exports.initialState = store_1.initialState;
5+
exports.dispatch = store_1.dispatch;
6+
var reducer_1 = require('./reducers/reducer');
7+
exports.reducer = reducer_1.default;

lib/actions/actionTypes.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,23 @@
1-
exports.SET_PROJECT="SET_PROJECT",exports.LOAD_TUTORIALS="LOAD_TUTORIALS",exports.SET_ROUTE="SET_ROUTE",exports.SET_PAGE="SET_PAGE",exports.NEXT_PAGE="NEXT_PAGE",exports.SET_POSITION="SET_POSITION",exports.SET_PROGRESS="SET_PROGRESS",exports.PAGE_COMPLETE="PAGE_COMPLETE",exports.CHAPTER_COMPLETE="CHAPTER_COMPLETE",exports.PROJECT_COMPLETE="PROJECT_COMPLETE",exports.SET_TASK_POSITION="SET_TASK_POSITION",exports.EDITOR_ACTIONS="EDITOR_ACTIONS",exports.SHOW_HINT="SHOW_HINT",exports.SHOW_SOLUTION="SHOW_SOLUTION",exports.RUN_TESTS="RUN_TESTS",exports.TEST_COMPLETE="TEST_COMPLETE",exports.TEST_RESULT="TEST_RESULT",exports.TOGGLE_LOG="CHECK_LOG",exports.LOG_MESSAGE="LOG_MESSAGE",exports.TOGGLE_ALERT="TOGGLE_ALERT",exports.REPLAY_ALERT="SHOW_ALERT",exports.NULL="NULL";
1+
"use strict";
2+
exports.SET_PROJECT = 'SET_PROJECT';
3+
exports.LOAD_TUTORIALS = 'LOAD_TUTORIALS';
4+
exports.SET_ROUTE = 'SET_ROUTE';
5+
exports.SET_PAGE = 'SET_PAGE';
6+
exports.NEXT_PAGE = 'NEXT_PAGE';
7+
exports.SET_POSITION = 'SET_POSITION';
8+
exports.SET_PROGRESS = 'SET_PROGRESS';
9+
exports.PAGE_COMPLETE = 'PAGE_COMPLETE';
10+
exports.CHAPTER_COMPLETE = 'CHAPTER_COMPLETE';
11+
exports.PROJECT_COMPLETE = 'PROJECT_COMPLETE';
12+
exports.SET_TASK_POSITION = 'SET_TASK_POSITION';
13+
exports.EDITOR_ACTIONS = 'EDITOR_ACTIONS';
14+
exports.SHOW_HINT = 'SHOW_HINT';
15+
exports.SHOW_SOLUTION = 'SHOW_SOLUTION';
16+
exports.RUN_TESTS = 'RUN_TESTS';
17+
exports.TEST_COMPLETE = 'TEST_COMPLETE';
18+
exports.TEST_RESULT = 'TEST_RESULT';
19+
exports.TOGGLE_LOG = 'CHECK_LOG';
20+
exports.LOG_MESSAGE = 'LOG_MESSAGE';
21+
exports.TOGGLE_ALERT = 'TOGGLE_ALERT';
22+
exports.REPLAY_ALERT = 'SHOW_ALERT';
23+
exports.NULL = 'NULL';

lib/actions/actions.js

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,54 @@
1-
"use strict";function setProject(){return{type:Type.SET_PROJECT}}function setProgress(){return{type:Type.SET_PROGRESS}}function setRoute(e){return{type:Type.SET_ROUTE,payload:{route:e}}}function setPosition(e){return{type:Type.SET_POSITION,payload:{position:e}}}function loadTutorial(e){package_1["default"].selectPackage(e),_base_1.store.dispatch(setProject()),_base_1.store.dispatch(setPosition({chapter:0,page:0})),_base_1.store.dispatch(setProgress())}function toggleLog(){var e=!_base_1.store.getState().log.open;return{type:Type.TOGGLE_LOG,payload:{open:e}}}function logMessage(e){return{type:Type.LOG_MESSAGE,payload:{message:e}}}var Type=require("./actionTypes"),_base_1=require("../_base"),package_1=require("../services/package");exports.setProject=setProject,exports.setProgress=setProgress,exports.setRoute=setRoute,exports.setPosition=setPosition,exports.loadTutorial=loadTutorial,exports.toggleLog=toggleLog,exports.logMessage=logMessage;var page_actions_1=require("./page-actions");exports.setPage=page_actions_1.setPage,exports.nextPage=page_actions_1.nextPage;var progress_actions_1=require("./progress-actions");exports.pageComplete=progress_actions_1.pageComplete,exports.chapterComplete=progress_actions_1.chapterComplete,exports.projectComplete=progress_actions_1.projectComplete;var task_actions_1=require("./task-actions");exports.setTaskPosition=task_actions_1.setTaskPosition,exports.showHint=task_actions_1.showHint,exports.runTests=task_actions_1.runTests,exports.testComplete=task_actions_1.testComplete,exports.testResult=task_actions_1.testResult;var tutorials_1=require("./tutorials");exports.loadTutorials=tutorials_1.loadTutorials;var alert_1=require("./alert");exports.toggleAlert=alert_1.toggleAlert,exports.replayAlert=alert_1.replayAlert;
1+
'use strict';
2+
var Type = require('./actionTypes');
3+
var _base_1 = require('../_base');
4+
var package_1 = require('../services/package');
5+
function setProject() {
6+
return { type: Type.SET_PROJECT };
7+
}
8+
exports.setProject = setProject;
9+
function setProgress() {
10+
return { type: Type.SET_PROGRESS };
11+
}
12+
exports.setProgress = setProgress;
13+
function setRoute(route) {
14+
return { type: Type.SET_ROUTE, payload: { route: route } };
15+
}
16+
exports.setRoute = setRoute;
17+
function setPosition(position) {
18+
return { type: Type.SET_POSITION, payload: { position: position } };
19+
}
20+
exports.setPosition = setPosition;
21+
function loadTutorial(name) {
22+
package_1.default.selectPackage(name);
23+
_base_1.store.dispatch(setProject());
24+
_base_1.store.dispatch(setPosition({ chapter: 0, page: 0 }));
25+
_base_1.store.dispatch(setProgress());
26+
}
27+
exports.loadTutorial = loadTutorial;
28+
function toggleLog() {
29+
var open = !_base_1.store.getState().log.open;
30+
return { type: Type.TOGGLE_LOG, payload: { open: open } };
31+
}
32+
exports.toggleLog = toggleLog;
33+
function logMessage(message) {
34+
return { type: Type.LOG_MESSAGE, payload: { message: message } };
35+
}
36+
exports.logMessage = logMessage;
37+
var page_actions_1 = require('./page-actions');
38+
exports.setPage = page_actions_1.setPage;
39+
exports.nextPage = page_actions_1.nextPage;
40+
var progress_actions_1 = require('./progress-actions');
41+
exports.pageComplete = progress_actions_1.pageComplete;
42+
exports.chapterComplete = progress_actions_1.chapterComplete;
43+
exports.projectComplete = progress_actions_1.projectComplete;
44+
var task_actions_1 = require('./task-actions');
45+
exports.setTaskPosition = task_actions_1.setTaskPosition;
46+
exports.showHint = task_actions_1.showHint;
47+
exports.runTests = task_actions_1.runTests;
48+
exports.testComplete = task_actions_1.testComplete;
49+
exports.testResult = task_actions_1.testResult;
50+
var tutorials_1 = require('./tutorials');
51+
exports.loadTutorials = tutorials_1.loadTutorials;
52+
var alert_1 = require('./alert');
53+
exports.toggleAlert = alert_1.toggleAlert;
54+
exports.replayAlert = alert_1.replayAlert;

lib/actions/alert.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,19 @@
1-
function toggleAlert(e){var r=_base_1.store.getState().alert.open;return e=e?_.assign(e,{open:!r}):{message:"",action:"",open:!1},{type:Type.TOGGLE_ALERT,payload:{alert:e}}}function replayAlert(){return{type:Type.REPLAY_ALERT}}var _base_1=require("../_base"),Type=require("./actionTypes"),_=require("lodash");exports.toggleAlert=toggleAlert,exports.replayAlert=replayAlert;
1+
"use strict";
2+
var _base_1 = require('../_base');
3+
var Type = require('./actionTypes');
4+
var _ = require('lodash');
5+
function toggleAlert(alert) {
6+
var isOpen = _base_1.store.getState().alert.open;
7+
if (!alert) {
8+
alert = { message: '', action: '', open: false };
9+
}
10+
else {
11+
alert = _.assign(alert, { open: !isOpen });
12+
}
13+
return { type: Type.TOGGLE_ALERT, payload: { alert: alert } };
14+
}
15+
exports.toggleAlert = toggleAlert;
16+
function replayAlert() {
17+
return { type: Type.REPLAY_ALERT };
18+
}
19+
exports.replayAlert = replayAlert;

lib/actions/page-actions.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
1-
function setPage(e){void 0===e&&(e={chapter:0,page:0});var a=package_1["default"].getPage(e),t=package_1["default"].getTasks(e),s=_.flatten(t.map(function(e){return e.tests||[]})),r=t.map(function(e){return e.actions||[]});return{type:Type.SET_PAGE,payload:{page:a,tasks:t,position:e,taskTests:s,actions:r}}}function nextPage(){var e=_base_1.store.getState().position,a=package_1["default"].getNextPosition(e);return setPage(a)}var Type=require("./actionTypes"),_base_1=require("../_base"),package_1=require("../services/package"),_=require("lodash");exports.setPage=setPage,exports.nextPage=nextPage;
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var _base_1 = require('../_base');
4+
var package_1 = require('../services/package');
5+
var _ = require('lodash');
6+
function setPage(selectedPosition) {
7+
if (selectedPosition === void 0) { selectedPosition = { chapter: 0, page: 0 }; }
8+
var page = package_1.default.getPage(selectedPosition);
9+
var tasks = package_1.default.getTasks(selectedPosition);
10+
var taskTests = _.flatten(tasks.map(function (task) { return task.tests || []; }));
11+
var actions = tasks.map(function (task) { return task.actions || []; });
12+
return { type: Type.SET_PAGE, payload: { page: page, tasks: tasks, position: selectedPosition, taskTests: taskTests, actions: actions } };
13+
}
14+
exports.setPage = setPage;
15+
function nextPage() {
16+
var position = _base_1.store.getState().position;
17+
var nextPosition = package_1.default.getNextPosition(position);
18+
return setPage(nextPosition);
19+
}
20+
exports.nextPage = nextPage;

lib/actions/progress-actions.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,29 @@
1-
function pageComplete(){var e=_base_1.store.getState().position,t=_base_1.store.getState().progress.chapters[e.chapter].pages.length,p={type:Type.PAGE_COMPLETE,payload:{position:e}};return e.page>=t-1?(_base_1.store.dispatch(chapterComplete()),p):p}function chapterComplete(){var e=_base_1.store.getState().position.chapter,t=_base_1.store.getState().progress.chapters.length,p={type:Type.CHAPTER_COMPLETE,payload:{chapter:e}};return e>=t-1?(_base_1.store.dispatch(projectComplete()),p):p}function projectComplete(){return{type:Type.PROJECT_COMPLETE}}var Type=require("./actionTypes"),_base_1=require("../_base");exports.pageComplete=pageComplete,exports.chapterComplete=chapterComplete,exports.projectComplete=projectComplete;
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var _base_1 = require('../_base');
4+
function pageComplete() {
5+
var position = _base_1.store.getState().position;
6+
var pageLength = _base_1.store.getState().progress.chapters[position.chapter].pages.length;
7+
var action = { type: Type.PAGE_COMPLETE, payload: { position: position } };
8+
if (position.page >= pageLength - 1) {
9+
_base_1.store.dispatch(chapterComplete());
10+
return action;
11+
}
12+
return action;
13+
}
14+
exports.pageComplete = pageComplete;
15+
function chapterComplete() {
16+
var chapter = _base_1.store.getState().position.chapter;
17+
var chapterLength = _base_1.store.getState().progress.chapters.length;
18+
var action = { type: Type.CHAPTER_COMPLETE, payload: { chapter: chapter } };
19+
if (chapter >= chapterLength - 1) {
20+
_base_1.store.dispatch(projectComplete());
21+
return action;
22+
}
23+
return action;
24+
}
25+
exports.chapterComplete = chapterComplete;
26+
function projectComplete() {
27+
return { type: Type.PROJECT_COMPLETE };
28+
}
29+
exports.projectComplete = projectComplete;

lib/actions/task-actions.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,36 @@
1-
function checkPageComplete(t){var e=_base_1.store.getState().taskTests.length;t>e&&_base_1.store.dispatch(Action.pageComplete())}function setTaskPosition(t){var e=_base_1.store.getState().taskPosition;return e===t?{type:Type.NULL}:(checkPageComplete(t),{type:Type.SET_TASK_POSITION,payload:{taskPosition:t}})}function showHint(){return{type:Type.SHOW_HINT}}function runTests(){return{type:Type.RUN_TESTS}}function testResult(t){var e=_base_1.store.getState().editorActions;return{type:Type.TEST_RESULT,payload:{result:t,actions:e}}}function testComplete(){return{type:Type.TEST_COMPLETE}}var Type=require("./actionTypes"),Action=require("./actions"),_base_1=require("../_base");exports.setTaskPosition=setTaskPosition,exports.showHint=showHint,exports.runTests=runTests,exports.testResult=testResult,exports.testComplete=testComplete;
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var Action = require('./actions');
4+
var _base_1 = require('../_base');
5+
function checkPageComplete(taskPosition) {
6+
var taskLength = _base_1.store.getState().taskTests.length;
7+
if (taskPosition > taskLength) {
8+
_base_1.store.dispatch(Action.pageComplete());
9+
}
10+
}
11+
function setTaskPosition(taskPosition) {
12+
var currentTaskPosition = _base_1.store.getState().taskPosition;
13+
if (currentTaskPosition === taskPosition) {
14+
return { type: Type.NULL };
15+
}
16+
checkPageComplete(taskPosition);
17+
return { type: Type.SET_TASK_POSITION, payload: { taskPosition: taskPosition } };
18+
}
19+
exports.setTaskPosition = setTaskPosition;
20+
function showHint() {
21+
return { type: Type.SHOW_HINT };
22+
}
23+
exports.showHint = showHint;
24+
function runTests() {
25+
return { type: Type.RUN_TESTS };
26+
}
27+
exports.runTests = runTests;
28+
function testResult(result) {
29+
var actions = _base_1.store.getState().editorActions;
30+
return { type: Type.TEST_RESULT, payload: { result: result, actions: actions } };
31+
}
32+
exports.testResult = testResult;
33+
function testComplete() {
34+
return { type: Type.TEST_COMPLETE };
35+
}
36+
exports.testComplete = testComplete;

lib/actions/tutorials.js

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,54 @@
1-
function loadTutorials(){var e=[];if(global.coderoad.dir){var a=loadRootPackageJson();if(a)e=[].concat(searchForTutorials(a.dependencies)).concat(searchForTutorials(a.devDependencies));else{global.coderoad["package"]=null;var o='No package.json file available. Try running "npm init --y" in terminal';console.log(o),_base_1.store.dispatch(Action.toggleAlert({message:o,action:"tip",duration:6e3}))}}return{type:Type.LOAD_TUTORIALS,payload:{tutorials:e}}}function loadRootPackageJson(){var e=path.join(global.coderoad.dir,"package.json");return exists_1.fileExists(e)?JSON.parse(fs.readFileSync(e,"utf8")):!1}function isTutorial(e){var a=path.join(global.coderoad.dir,"node_modules",e,"package.json");if(exists_1.fileExists(a)){var o=JSON.parse(fs.readFileSync(a,"utf8"));if(o.main&&o.main.match(/coderoad.json$/)){var r=path.join(global.coderoad.dir,"node_modules",e,o.main);if(exists_1.fileExists(r))return!0}}return!1}function searchForTutorials(e){return e&&Object.keys(e).length>0?Object.keys(e).filter(function(e){return isTutorial(e)}):[]}var _base_1=require("../_base"),Action=require("./actions"),path=require("path"),fs=require("fs"),Type=require("./actionTypes"),exists_1=require("../services/exists");exports.loadTutorials=loadTutorials;
1+
"use strict";
2+
var _base_1 = require('../_base');
3+
var Action = require('./actions');
4+
var path = require('path');
5+
var fs = require('fs');
6+
var Type = require('./actionTypes');
7+
var exists_1 = require('../services/exists');
8+
function loadTutorials() {
9+
var tutorials = [];
10+
if (global.coderoad.dir) {
11+
var packageJson = loadRootPackageJson();
12+
if (!packageJson) {
13+
global.coderoad.package = null;
14+
var message = 'No package.json file available. Try running "npm init --y" in terminal';
15+
console.log(message);
16+
_base_1.store.dispatch(Action.toggleAlert({ message: message, action: 'tip', duration: 6000 }));
17+
}
18+
else {
19+
tutorials = []
20+
.concat(searchForTutorials(packageJson.dependencies))
21+
.concat(searchForTutorials(packageJson.devDependencies));
22+
}
23+
}
24+
return { type: Type.LOAD_TUTORIALS, payload: { tutorials: tutorials } };
25+
}
26+
exports.loadTutorials = loadTutorials;
27+
function loadRootPackageJson() {
28+
var pathToPackageJson = path.join(global.coderoad.dir, 'package.json');
29+
if (exists_1.fileExists(pathToPackageJson)) {
30+
return JSON.parse(fs.readFileSync(pathToPackageJson, 'utf8'));
31+
}
32+
return false;
33+
}
34+
function isTutorial(name) {
35+
var pathToTutorialPackageJson = path.join(global.coderoad.dir, 'node_modules', name, 'package.json');
36+
if (exists_1.fileExists(pathToTutorialPackageJson)) {
37+
var packageJson = JSON.parse(fs.readFileSync(pathToTutorialPackageJson, 'utf8'));
38+
if (packageJson.main && packageJson.main.match(/coderoad.json$/)) {
39+
var pathToCoderoadJson = path.join(global.coderoad.dir, 'node_modules', name, packageJson.main);
40+
if (exists_1.fileExists(pathToCoderoadJson)) {
41+
return true;
42+
}
43+
}
44+
}
45+
return false;
46+
}
47+
function searchForTutorials(location) {
48+
if (!!location && Object.keys(location).length > 0) {
49+
return Object.keys(location).filter(function (name) { return isTutorial(name); });
50+
}
51+
else {
52+
return [];
53+
}
54+
}

lib/atom/editor.js

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,77 @@
1-
function setAtomGlobals(){if(atom.project.rootDirectories.length>0)global.coderoad.dir=atom.project.rootDirectories[0].path;else{var t="Create a new Atom project. In Atom: File > Open > any folder";_base_1.store.dispatch(Action.toggleAlert({message:t,action:"tip",duration:6e3})),console.log(t),global.coderoad.dir=!1}}function findEditor(){var t=atom.workspace.getActiveTextEditor();return t?getEditorCount>1e3?void console.log("Failed to find active editor"):(getEditorCount=0,t):(getEditorCount+=1,void setTimeout(function(){return findEditor()},10))}function getEditor(){return new Promise(function(t,o){t(findEditor())})}function open(t,o){return atom.workspace.open(t,o),!0}function set(t){getEditor().then(function(o){o.setText(t),o.insertNewline(),o.moveToBottom(),o.save()})}function insert(t,o){o=Object.assign(o,{autoIndent:!0}),getEditor().then(function(e){e.moveToBottom(),e.insertText(t,o),e.insertNewline(),e.moveToBottom(),e.save()})}function closeAllPanels(){var t=atom.workspace.getTextEditors();t.forEach(function(t){t.destroy()})}function quit(){}var _base_1=require("../_base"),Action=require("../actions/actions");exports.setAtomGlobals=setAtomGlobals;var getEditorCount=0;exports.findEditor=findEditor,exports.getEditor=getEditor,exports.open=open,exports.set=set,exports.insert=insert,exports.closeAllPanels=closeAllPanels,exports.quit=quit;
1+
"use strict";
2+
var _base_1 = require('../_base');
3+
var Action = require('../actions/actions');
4+
function setAtomGlobals() {
5+
if (atom.project.rootDirectories.length > 0) {
6+
global.coderoad.dir = atom.project.rootDirectories[0].path;
7+
}
8+
else {
9+
var message = 'Create a new Atom project. In Atom: File > Open > any folder';
10+
_base_1.store.dispatch(Action.toggleAlert({ message: message, action: 'tip', duration: 6000 }));
11+
console.log(message);
12+
global.coderoad.dir = false;
13+
}
14+
}
15+
exports.setAtomGlobals = setAtomGlobals;
16+
var getEditorCount = 0;
17+
function findEditor() {
18+
var editor = atom.workspace.getActiveTextEditor();
19+
if (!editor) {
20+
getEditorCount += 1;
21+
setTimeout(function () {
22+
return findEditor();
23+
}, 10);
24+
}
25+
else if (getEditorCount > 1000) {
26+
console.log('Failed to find active editor');
27+
return undefined;
28+
}
29+
else {
30+
getEditorCount = 0;
31+
return editor;
32+
}
33+
}
34+
exports.findEditor = findEditor;
35+
function getEditor() {
36+
return new Promise(function (resolve, reject) {
37+
resolve(findEditor());
38+
});
39+
}
40+
exports.getEditor = getEditor;
41+
function open(filePath, options) {
42+
atom.workspace.open(filePath, options);
43+
return true;
44+
}
45+
exports.open = open;
46+
function set(text) {
47+
getEditor().then(function (editor) {
48+
editor.setText(text);
49+
editor.insertNewline();
50+
editor.moveToBottom();
51+
editor.save();
52+
});
53+
}
54+
exports.set = set;
55+
function insert(text, options) {
56+
options = Object.assign(options, {
57+
autoIndent: true
58+
});
59+
getEditor().then(function (editor) {
60+
editor.moveToBottom();
61+
editor.insertText(text, options);
62+
editor.insertNewline();
63+
editor.moveToBottom();
64+
editor.save();
65+
});
66+
}
67+
exports.insert = insert;
68+
function closeAllPanels() {
69+
var editors = atom.workspace.getTextEditors();
70+
editors.forEach(function (editor) {
71+
editor.destroy();
72+
});
73+
}
74+
exports.closeAllPanels = closeAllPanels;
75+
function quit() {
76+
}
77+
exports.quit = quit;

0 commit comments

Comments
 (0)