alm
Version:
The best IDE for TypeScript
85 lines (84 loc) • 3.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var sw = require("../../utils/simpleWorker");
var contract = require("./projectServiceContract");
var fmc = require("../../disk/fileModelCache");
var utils_1 = require("../../../common/utils");
var events_1 = require("../../../common/events");
var projectDataLoader = require("../../disk/projectDataLoader");
// *sinks* for important caches
var globalErrorCacheServer_1 = require("../../globalErrorCacheServer");
exports.fileOutputStatusUpdated = new events_1.TypedEvent();
exports.completeOutputStatusCacheUpdated = new events_1.TypedEvent();
exports.liveBuildResults = new events_1.TypedEvent();
exports.working = new events_1.TypedEvent();
var Master;
(function (Master) {
Master.sync = function (data) {
activeProjectConfig.sync();
return utils_1.resolve({});
};
Master.getFileContents = function (data) {
var contents = fmc.getOrCreateOpenFile(data.filePath).getContents();
return utils_1.resolve({ contents: contents });
};
Master.getOpenFilePaths = function (data) {
return utils_1.resolve(fmc.getOpenFiles().map(function (f) { return f.config.filePath; }));
};
// sinks for important caches
Master.receiveErrorCacheDelta = function (data) {
globalErrorCacheServer_1.errorsCache.applyDelta(data);
return utils_1.resolve({});
};
Master.receiveFileOutputStatusUpdate = function (data) {
exports.fileOutputStatusUpdated.emit(data);
return utils_1.resolve({});
};
Master.receiveCompleteOutputStatusCacheUpdate = function (data) {
exports.completeOutputStatusCacheUpdated.emit(data);
return utils_1.resolve({});
};
Master.receiveLiveBuildResults = function (data) {
exports.liveBuildResults.emit(data);
return utils_1.resolve({});
};
Master.receiveIncrementallyAddedFile = function (data) {
activeProjectConfig.incrementallyAddedFile(data.filePath);
return utils_1.resolve({});
};
Master.receiveWorking = function (data) {
exports.working.emit(data);
return utils_1.resolve({});
};
})(Master || (Master = {}));
// Ensure that the namespace follows the contract
var _checkTypes = Master;
// launch worker
exports.worker = sw.startWorker({
workerPath: __dirname + '/projectServiceWorker',
workerContract: contract.worker,
masterImplementation: Master,
onCrashRestart: function () {
/** TS Crashed. Send down the data again if any */
if (activeProjectConfig.activeProjectConfigDetails) {
globalErrorCacheServer_1.errorsCache.clearErrorsForSource('projectService');
sendActiveProjectDownToWorker(activeProjectConfig.activeProjectConfigDetails);
}
}
}).worker;
var sendActiveProjectDownToWorker = function (activeProjectConfigDetails) {
var projectData = projectDataLoader.getProjectDataLoaded(activeProjectConfigDetails);
exports.worker.setActiveProjectConfigDetails({ projectData: projectData });
};
// Subscribe and send down the stuff we need to send to the worker based on our state
var activeProjectConfig = require("../../disk/activeProjectConfig");
var fileListingMaster = require("../fileListing/fileListingMaster");
function start() {
/** When active project changes send down the data */
activeProjectConfig.activeProjectConfigDetailsUpdated.on(sendActiveProjectDownToWorker);
fileListingMaster.fileListingDelta.on(function (delta) { return activeProjectConfig.fileListingDelta(delta); });
fmc.didEdits.on(function (edits) { return exports.worker.fileEdited(edits); });
fmc.savedFileChangedOnDisk.on(function (update) { return exports.worker.fileChangedOnDisk(update); });
fmc.didStatusChange.on(function (update) { return update.saved && exports.worker.fileSaved({ filePath: update.filePath }); });
}
exports.start = start;