UNPKG

alm

Version:

The best IDE for TypeScript

85 lines (84 loc) 3.92 kB
"use strict"; 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;