UNPKG

alm

Version:

The best IDE for TypeScript

301 lines (300 loc) 13.5 kB
"use strict"; 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;