alm
Version:
The best IDE for TypeScript
301 lines (300 loc) • 13.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var sls = require("../socketLib/socketLibServer");
var contract = require("./socketContract");
var flm = require("../server/workers/fileListing/fileListingMaster");
var workingDir = require("../server/disk/workingDir");
var gitService = require("../server/workers/external/gitService");
var npmService = require("../server/workers/external/npmService");
var findAndReplaceMultiService = require("../server/workers/external/findAndReplaceMultiService");
var configCreatorService = require("../server/workers/external/configCreatorService");
var settings = require("../server/disk/settings");
var serverDiskService = require("../server/workers/external/serverDiskService");
var session = require("../server/disk/session");
var events_1 = require("../common/events");
var serverExit_1 = require("./serverExit");
var bundlerMaster = require("../server/workers/external/demoReact/bundler/bundlerMaster");
var resolve = sls.resolve;
var fmc = require("../server/disk/fileModelCache");
var activeProjectConfig = require("../server/disk/activeProjectConfig");
var globalErrorCacheServer_1 = require("../server/globalErrorCacheServer");
var projectServiceMaster = require("../server/workers/lang/projectServiceMaster");
var testedMaster_1 = require("../server/workers/tested/testedMaster");
var demoService = require("../server/workers/external/demoService");
var demoReactService = require("../server/workers/external/demoReact/bundler/bundlerMaster");
exports.serverGotExplicitSaveCommand = new events_1.TypedEvent();
var Server;
(function (Server) {
Server.echo = function (data, client) {
console.log('Echo request received:', data);
return client.increment({ num: data.num }).then(function (res) {
return {
text: data.text,
num: res.num
};
});
};
Server.filePaths = function (data) {
return flm.filePathsUpdated.current().then(function (res) { return ({ filePaths: res.filePaths, completed: res.completed, rootDir: res.rootDir }); });
};
Server.makeAbsolute = function (data) {
return Promise.resolve({ filePath: workingDir.makeAbsolute(data.relativeFilePath) });
};
/**
* File stuff
*/
Server.openFile = function (data) {
var file = fmc.getOrCreateOpenFile(data.filePath, /*autoCreate*/ true);
return resolve({ contents: file.getContents(), saved: file.saved(), editorOptions: file.editorOptions });
};
Server.closeFile = function (data) {
fmc.closeOpenFile(data.filePath);
return resolve({});
};
Server.editFile = function (data) {
var file = fmc.getOrCreateOpenFile(data.filePath);
var saved = file.edits(data.edits).saved;
// console.log('-------------------------');
// console.log(file.getContents());
return resolve({ saved: saved });
};
Server.saveFile = function (data) {
fmc.saveOpenFile(data.filePath);
exports.serverGotExplicitSaveCommand.emit({ filePath: data.filePath });
return resolve({});
};
Server.getFileStatus = function (data) {
var file = fmc.getOrCreateOpenFile(data.filePath, /*autoCreate*/ true);
return resolve({ saved: file.saved() });
};
Server.addFile = function (data) {
var file = fmc.getOrCreateOpenFile(data.filePath, /*autoCreate*/ true);
return resolve({ error: null });
};
Server.addFolder = function (data) {
var file = fmc.addFolder(data.filePath);
return resolve({ error: null });
};
Server.deleteFromDisk = function (data) {
var file = fmc.deleteFromDisk(data);
return resolve({ errors: [] });
};
Server.duplicateFile = function (data) {
var file = fmc.duplicateFile(data);
return resolve({ error: null });
};
Server.duplicateDir = function (data) {
return fmc.duplicateDir(data).then(function (error) {
return { error: error };
});
};
Server.movePath = function (data) {
return fmc.movePath(data).then(function (error) {
return { error: error };
});
};
Server.launchDirectory = function (data) {
return fmc.launchDirectory(data);
};
Server.launchTerminal = function (data) {
return fmc.launchTerminal(data);
};
/**
* Config stuff
*/
Server.availableProjects = function (data) {
return activeProjectConfig.availableProjects.current();
};
Server.getActiveProjectConfigDetails = function (data) {
return activeProjectConfig.activeProjectConfigDetailsUpdated.current();
};
Server.setActiveProjectConfigDetails = function (data) {
activeProjectConfig.syncCore(data);
return resolve({});
};
Server.isFilePathInActiveProject = function (data) {
return activeProjectConfig.projectFilePathsUpdated.current().then(function (res) {
var inActiveProject = res.filePaths.some(function (fp) { return fp === data.filePath; });
return { inActiveProject: inActiveProject };
});
};
Server.setOpenUITabs = function (data) {
session.setOpenUITabs(data.sessionId, data.tabLayout, data.selectedTabId);
return resolve({});
};
Server.getOpenUITabs = function (data) {
var result = session.getOpenUITabs(data.sessionId);
return resolve(result);
};
Server.activeProjectFilePaths = function (data) {
return activeProjectConfig.projectFilePathsUpdated.current();
};
Server.sync = function (data) {
activeProjectConfig.sync();
return resolve({});
};
Server.setSetting = function (data) {
session.setSetting(data);
return resolve({});
};
Server.getSetting = function (data) {
return resolve(session.getSetting(data));
};
Server.getValidSessionId = function (data) {
return resolve(session.getValidSessionId(data.sessionId));
};
/**
* Error handling
*/
Server.getErrors = function (data) {
return resolve(globalErrorCacheServer_1.errorsCache.getErrors());
};
/**
* Tested
*/
Server.getTestResults = function (data) {
return resolve(testedMaster_1.testCache.getResults());
};
/**
* Project service
*/
Server.getCompletionsAtPosition = function (query) {
return projectServiceMaster.worker.getCompletionsAtPosition(query);
};
Server.quickInfo = function (query) {
return projectServiceMaster.worker.quickInfo(query);
};
Server.getCompletionEntryDetails = projectServiceMaster.worker.getCompletionEntryDetails;
Server.getRenameInfo = projectServiceMaster.worker.getRenameInfo;
Server.getDefinitionsAtPosition = projectServiceMaster.worker.getDefinitionsAtPosition;
Server.getDoctorInfo = projectServiceMaster.worker.getDoctorInfo;
Server.getReferences = projectServiceMaster.worker.getReferences;
Server.formatDocument = projectServiceMaster.worker.formatDocument;
Server.formatDocumentRange = projectServiceMaster.worker.formatDocumentRange;
Server.getNavigateToItems = projectServiceMaster.worker.getNavigateToItems;
Server.getNavigateToItemsForFilePath = projectServiceMaster.worker.getNavigateToItemsForFilePath;
Server.getDependencies = projectServiceMaster.worker.getDependencies;
Server.getAST = projectServiceMaster.worker.getAST;
Server.getQuickFixes = projectServiceMaster.worker.getQuickFixes;
Server.applyQuickFix = projectServiceMaster.worker.applyQuickFix;
Server.build = projectServiceMaster.worker.build;
Server.getSemanticTree = projectServiceMaster.worker.getSemanticTree;
Server.getOccurrencesAtPosition = projectServiceMaster.worker.getOccurrencesAtPosition;
Server.getFormattingEditsAfterKeystroke = projectServiceMaster.worker.getFormattingEditsAfterKeystroke;
Server.removeUnusedImports = projectServiceMaster.worker.removeUnusedImports;
/**
* Documentation browser
*/
Server.getTopLevelModuleNames = projectServiceMaster.worker.getTopLevelModuleNames;
Server.getUpdatedModuleInformation = projectServiceMaster.worker.getUpdatedModuleInformation;
/** UML Diagram */
Server.getUmlDiagramForFile = projectServiceMaster.worker.getUmlDiagramForFile;
/** tsFlow */
Server.getFlowRoots = projectServiceMaster.worker.getFlowRoots;
/** live analysis */
Server.getLiveAnalysis = projectServiceMaster.worker.getLiveAnalysis;
/**
* Output Status
*/
Server.getCompleteOutputStatusCache = function (data) {
return exports.cast.completeOutputStatusCacheUpdated.current();
};
Server.getLiveBuildResults = function (data) {
return exports.cast.liveBuildResults.current();
};
Server.getJSOutputStatus = projectServiceMaster.worker.getJSOutputStatus;
/**
* Live demo
*/
Server.enableLiveDemo = demoService.WorkerImplementation.enableLiveDemo;
Server.disableLiveDemo = demoService.WorkerImplementation.disableLiveDemo;
Server.enableLiveDemoReact = demoReactService.ExternalAPI.enableLiveDemo;
Server.disableLiveDemoReact = demoReactService.ExternalAPI.disableLiveDemo;
/**
* Git service
*/
Server.gitStatus = gitService.gitStatus;
Server.gitReset = gitService.gitReset;
Server.gitDiff = gitService.gitDiff;
Server.gitAddAllCommitAndPush = gitService.gitAddAllCommitAndPush;
Server.gitFetchLatestAndRebase = gitService.gitFetchLatestAndRebase;
/**
* NPM service
*/
Server.npmLatest = npmService.npmLatest;
/**
* FARM
*/
Server.startFarming = findAndReplaceMultiService.startFarming;
Server.stopFarmingIfRunning = findAndReplaceMultiService.stopFarmingIfRunning;
Server.farmResults = function (query) { return findAndReplaceMultiService.farmResultsUpdated.current(); };
/**
* Config creator
*/
Server.createEditorconfig = configCreatorService.createEditorconfig;
/**
* Settings
*/
Server.getSettingsFilePath = function (query) { return Promise.resolve({ filePath: settings.getSettingsFilePath() }); };
/**
* Server Disk Service
*/
Server.getDirItems = function (query) { return Promise.resolve({ dirItems: serverDiskService.getDirItems(query.dirPath) }); };
})(Server || (Server = {}));
// Ensure that the namespace follows the contract
var _checkTypes = Server;
/** Will be available after register is called */
exports.cast = contract.cast;
/** launch server */
function register(app) {
var runResult = sls.run({
app: app,
serverImplementation: Server,
clientContract: contract.client,
cast: contract.cast
});
exports.cast = runResult.cast;
/** File model */
fmc.savedFileChangedOnDisk.pipe(exports.cast.savedFileChangedOnDisk);
fmc.didEdits.pipe(exports.cast.didEdits);
fmc.didStatusChange.pipe(exports.cast.didStatusChange);
fmc.editorOptionsChanged.pipe(exports.cast.editorOptionsChanged);
/** File listing updates */
flm.filePathsUpdated.pipe(exports.cast.filePathsUpdated);
/** Active Project */
activeProjectConfig.availableProjects.pipe(exports.cast.availableProjectsUpdated);
activeProjectConfig.activeProjectConfigDetailsUpdated.pipe(exports.cast.activeProjectConfigDetailsUpdated);
activeProjectConfig.projectFilePathsUpdated.pipe(exports.cast.activeProjectFilePathsUpdated);
activeProjectConfig.errorsInTsconfig.errorsDelta.on(function (delta) { return globalErrorCacheServer_1.errorsCache.applyDelta(delta); });
/** Errors */
globalErrorCacheServer_1.errorsCache.errorsDelta.pipe(exports.cast.errorsDelta);
/** Tested */
testedMaster_1.testCache.testResultsDelta.pipe(exports.cast.testResultsDelta);
testedMaster_1.working.pipe(exports.cast.testedWorking);
/** FARM */
findAndReplaceMultiService.farmResultsUpdated.pipe(exports.cast.farmResultsUpdated);
/** JS Output Status */
exports.cast.liveBuildResults.emit({ builtCount: 0, totalCount: 0 }); // for initial joiners
exports.cast.completeOutputStatusCacheUpdated.emit({}); // for initial joiners
projectServiceMaster.fileOutputStatusUpdated.pipe(exports.cast.fileOutputStatusUpdated);
projectServiceMaster.completeOutputStatusCacheUpdated.pipe(exports.cast.completeOutputStatusCacheUpdated);
projectServiceMaster.liveBuildResults.pipe(exports.cast.liveBuildResults);
/** Live demo */
demoService.WorkerImplementation.liveDemoData.pipe(exports.cast.liveDemoData);
bundlerMaster.liveDemoBuildComplete.pipe(exports.cast.liveDemoBuildComplete);
exports.serverGotExplicitSaveCommand.on(function (e) {
if (e.filePath === demoService.WorkerImplementation.currentFilePath) {
demoService.WorkerImplementation.enableLiveDemo({ filePath: e.filePath });
}
if (e.filePath === demoReactService.ExternalAPI.currentFilePath) {
demoReactService.ExternalAPI.enableLiveDemo({ filePath: e.filePath });
}
});
/** TS Working */
projectServiceMaster.working.pipe(exports.cast.tsWorking);
/** If the server exits notify the clients */
serverExit_1.onServerExit(function () { return exports.cast.serverExiting.emit({}); });
// For testing
// setInterval(() => cast.hello.emit({ text: 'nice' }), 1000);
}
exports.register = register;