alm
Version:
The best IDE for TypeScript
133 lines (117 loc) • 6.47 kB
text/typescript
/**
* Load up TypeScript
*/
import * as byots from "byots";
const ensureImport = byots;
import * as sw from "../../utils/simpleWorker";
import * as contract from "./projectServiceContract";
import * as activeProject from "./activeProject"
import * as outputStatusCache from "./cache/outputStatusCache"
import * as projectService from "./projectService";
import * as docs from "./docs/docs";
import * as umlDiagram from "./umlDiagram/umlDiagram";
import * as tsFlow from "./tsFlow/tsFlow";
import * as liveAnalysis from "./liveAnalysis/liveAnalysis";
namespace Worker {
export const echo: typeof contract.worker.echo = (data) => Promise.resolve(data);
/**
* This is sort of the entry point of the worker. Nothing really happens till this gets called
*/
export const setActiveProjectConfigDetails: typeof contract.worker.setActiveProjectConfigDetails = (details) => {
const proj = activeProject.setActiveProjectConfigDetails(details.projectData);
return Promise.resolve({})
}
/** Build */
export const build: typeof contract.worker.build = (details) => {
const proj = activeProject.GetProject.getCurrentIfAny();
outputStatusCache.doCompleteProjectCacheUpdate(proj);
return Promise.resolve({})
}
export const getJSOutputStatus: typeof contract.worker.getJSOutputStatus = (details) => {
const result = projectService.getJSOutputStatus(details);
return Promise.resolve(result);
}
/**
* File information updates sent by the master. We tell the modules that care.
*/
export const fileEdited: typeof contract.worker.fileEdited = (details) => {
activeProject.fileEdited(details);
outputStatusCache.fileEdited(details);
return Promise.resolve({});
}
export const fileChangedOnDisk: typeof contract.worker.fileChangedOnDisk = (details) => {
activeProject.fileChangedOnDisk(details);
outputStatusCache.fileChangedOnDisk(details);
return Promise.resolve({});
}
export const fileSaved: typeof contract.worker.fileSaved = (details) => {
outputStatusCache.fileSaved(details);
return Promise.resolve({});
}
/**
* Project Service
*/
export var getCompletionsAtPosition : typeof contract.worker.getCompletionsAtPosition = projectService.getCompletionsAtPosition;
export var getCompletionEntryDetails : typeof contract.worker.getCompletionEntryDetails = projectService.getCompletionEntryDetails;
export var quickInfo : typeof contract.worker.quickInfo = projectService.quickInfo;
export var getRenameInfo : typeof contract.worker.getRenameInfo = projectService.getRenameInfo;
export var getDefinitionsAtPosition : typeof contract.worker.getDefinitionsAtPosition = projectService.getDefinitionsAtPosition;
export var getDoctorInfo : typeof contract.worker.getDoctorInfo = projectService.getDoctorInfo;
export var getReferences : typeof contract.worker.getReferences = projectService.getReferences;
export var formatDocument : typeof contract.worker.formatDocument = projectService.formatDocument;
export var formatDocumentRange : typeof contract.worker.formatDocumentRange = projectService.formatDocumentRange;
export var getNavigateToItems : typeof contract.worker.getNavigateToItems = projectService.getNavigateToItems;
export var getNavigateToItemsForFilePath : typeof contract.worker.getNavigateToItemsForFilePath = projectService.getNavigateToItemsForFilePath;
export var getDependencies : typeof contract.worker.getDependencies = projectService.getDependencies;
export var getAST : typeof contract.worker.getAST = projectService.getAST;
export var getQuickFixes : typeof contract.worker.getQuickFixes = projectService.getQuickFixes;
export var applyQuickFix : typeof contract.worker.applyQuickFix = projectService.applyQuickFix;
export var getSemanticTree : typeof contract.worker.getSemanticTree = projectService.getSemanticTree;
export var getOccurrencesAtPosition : typeof contract.worker.getOccurrencesAtPosition = projectService.getOccurrencesAtPosition;
export var getFormattingEditsAfterKeystroke : typeof contract.worker.getFormattingEditsAfterKeystroke = projectService.getFormattingEditsAfterKeystroke;
export var removeUnusedImports : typeof contract.worker.removeUnusedImports = projectService.removeUnusedImports;
/**
* Documentation Browser
*/
export var getTopLevelModuleNames : typeof contract.worker.getTopLevelModuleNames = docs.getTopLevelModuleNames;
export var getUpdatedModuleInformation : typeof contract.worker.getUpdatedModuleInformation = docs.getUpdatedModuleInformation;
/**
* Uml diagram
*/
export var getUmlDiagramForFile : typeof contract.worker.getUmlDiagramForFile = umlDiagram.getUmlDiagramForFile;
/**
* tsFlow
*/
export var getFlowRoots : typeof contract.worker.getFlowRoots = tsFlow.getFlowRoots;
/** live analysis */
export var getLiveAnalysis : typeof contract.worker.getLiveAnalysis = liveAnalysis.getLiveAnalysis;
}
// Ensure that the namespace follows the contract
const _checkTypes: typeof contract.worker = Worker;
// run worker
export const {master} = sw.runWorker({
workerImplementation: Worker,
masterContract: contract.master
});
/**
* Keep the master in sync with some important stuff
*/
import * as tsErrorsCache from "./cache/tsErrorsCache";
tsErrorsCache.errorsCache.errorsDelta.on((delta) => master.receiveErrorCacheDelta(delta));
outputStatusCache.fileOuputStatusUpdated.on((fileOuputStatusUpdate) => {
return master.receiveFileOutputStatusUpdate(fileOuputStatusUpdate);
});
outputStatusCache.completeOutputStatusCacheUpdated.on((completeOutputStatusCacheUpdate) => master.receiveCompleteOutputStatusCacheUpdate(completeOutputStatusCacheUpdate));
outputStatusCache.liveBuildResults.on((liveBuildResults) => master.receiveLiveBuildResults(liveBuildResults));
activeProject.working.on(working => {
master.receiveWorking(working)
});
/**
* We send down the master to `activeProject` otherwise we get in a cyclic reference :-/
* (activeProject needs us.master to read files) + (we need activeProject to tell it to set active project configuration)
*
* Similarly for `project` (project -> usedby -> activeProject -> used by us)
*/
activeProject.setMaster(master);
import * as project from "./core/project";
project.setMaster(master);