Skip to content

Commit ab1512f

Browse files
committed
Export server & session without any node specifics
1 parent 0fa6954 commit ab1512f

File tree

7 files changed

+75
-30
lines changed

7 files changed

+75
-30
lines changed

Jakefile.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,20 @@ var serverSources = [
100100
"editorServices.ts",
101101
"protocol.d.ts",
102102
"session.ts",
103+
"nodeimpl.ts",
103104
"server.ts"
104105
].map(function (f) {
105106
return path.join(serverDirectory, f);
106107
});
107108

109+
var languageServiceLibrarySources = [
110+
"editorServices.ts",
111+
"protocol.d.ts",
112+
"session.ts"
113+
].map(function (f) {
114+
return path.join(serverDirectory, f);
115+
});
116+
108117
var harnessSources = [
109118
"harness.ts",
110119
"sourceMapRecorder.ts",
@@ -137,6 +146,7 @@ var harnessSources = [
137146
"protocol.d.ts",
138147
"session.ts",
139148
"client.ts",
149+
"nodeimpl.ts",
140150
"editorServices.ts",
141151
].map(function (f) {
142152
return path.join(serverDirectory, f);
@@ -369,6 +379,20 @@ compileFile(servicesFile, servicesSources,[builtLocalDirectory, copyright].conca
369379
var serverFile = path.join(builtLocalDirectory, "tsserver.js");
370380
compileFile(serverFile, serverSources,[builtLocalDirectory, copyright].concat(serverSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true);
371381

382+
var lsslFile = path.join(builtLocalDirectory, "tslssl.js");
383+
compileFile(
384+
lsslFile,
385+
languageServiceLibrarySources,
386+
[builtLocalDirectory, copyright].concat(serverSources).concat(languageServiceLibrarySources),
387+
/*prefixes*/ [copyright],
388+
/*useBuiltCompiler*/ true,
389+
/*noOutFile*/ false,
390+
/*generateDeclarations*/ true);
391+
392+
// Local target to build the language service server library
393+
desc("Builds language service server library");
394+
task("lssl", [lsslFile]);
395+
372396
// Local target to build the compiler and services
373397
desc("Builds the full compiler and services");
374398
task("local", ["generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile]);

src/harness/harnessLanguageService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ module Harness.LanguageService {
583583
// This host is just a proxy for the clientHost, it uses the client
584584
// host to answer server queries about files on disk
585585
var serverHost = new SessionServerHost(clientHost);
586-
var server = new ts.server.Session(serverHost, serverHost);
586+
var server = new ts.server.Session(serverHost, new ts.server.NodeEnvironment(), serverHost);
587587

588588
// Fake the connection between the client and the server
589589
serverHost.writeMessage = client.onMessage.bind(client);

src/server/editorServices.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
/// <reference path="..\services\services.ts" />
33
/// <reference path="protocol.d.ts" />
44
/// <reference path="session.ts" />
5-
/// <reference path="node.d.ts" />
65

76
module ts.server {
87
export interface Logger {
@@ -28,7 +27,7 @@ module ts.server {
2827
});
2928
}
3029

31-
class ScriptInfo {
30+
export class ScriptInfo {
3231
svc: ScriptVersionCache;
3332
children: ScriptInfo[] = []; // files referenced by this file
3433
defaultProject: Project; // project to use by default for file
@@ -80,7 +79,7 @@ module ts.server {
8079
}
8180
}
8281

83-
class LSHost implements ts.LanguageServiceHost {
82+
export class LSHost implements ts.LanguageServiceHost {
8483
ls: ts.LanguageService = null;
8584
compilationSettings: ts.CompilerOptions;
8685
filenameToScript: ts.Map<ScriptInfo> = {};
@@ -273,7 +272,7 @@ module ts.server {
273272
}
274273
}
275274

276-
interface ProjectOptions {
275+
export interface ProjectOptions {
277276
// these fields can be present in the project file
278277
files?: string[];
279278
compilerOptions?: ts.CompilerOptions;
@@ -376,7 +375,7 @@ module ts.server {
376375
}
377376
}
378377

379-
interface ProjectOpenResult {
378+
export interface ProjectOpenResult {
380379
success?: boolean;
381380
errorMsg?: string;
382381
project?: Project;
@@ -392,11 +391,11 @@ module ts.server {
392391
return copiedList;
393392
}
394393

395-
interface ProjectServiceEventHandler {
394+
export interface ProjectServiceEventHandler {
396395
(eventName: string, project: Project, fileName: string): void;
397396
}
398397

399-
interface HostConfiguration {
398+
export interface HostConfiguration {
400399
formatCodeOptions: ts.FormatCodeOptions;
401400
hostInfo: string;
402401
}
@@ -953,7 +952,7 @@ module ts.server {
953952

954953
}
955954

956-
class CompilerService {
955+
export class CompilerService {
957956
host: LSHost;
958957
languageService: ts.LanguageService;
959958
classifier: ts.Classifier;
@@ -999,7 +998,7 @@ module ts.server {
999998

1000999
}
10011000

1002-
interface LineCollection {
1001+
export interface LineCollection {
10031002
charCount(): number;
10041003
lineCount(): number;
10051004
isLeaf(): boolean;
@@ -1013,7 +1012,7 @@ module ts.server {
10131012
leaf?: LineLeaf;
10141013
}
10151014

1016-
enum CharRangeSection {
1015+
export enum CharRangeSection {
10171016
PreStart,
10181017
Start,
10191018
Entire,
@@ -1022,7 +1021,7 @@ module ts.server {
10221021
PostEnd
10231022
}
10241023

1025-
interface ILineIndexWalker {
1024+
export interface ILineIndexWalker {
10261025
goSubtree: boolean;
10271026
done: boolean;
10281027
leaf(relativeStart: number, relativeLength: number, lineCollection: LineLeaf): void;
@@ -1248,7 +1247,7 @@ module ts.server {
12481247
}
12491248

12501249
// text change information
1251-
class TextChange {
1250+
export class TextChange {
12521251
constructor(public pos: number, public deleteLen: number, public insertedText?: string) {
12531252
}
12541253

@@ -1371,7 +1370,7 @@ module ts.server {
13711370
}
13721371
}
13731372

1374-
class LineIndexSnapshot implements ts.IScriptSnapshot {
1373+
export class LineIndexSnapshot implements ts.IScriptSnapshot {
13751374
index: LineIndex;
13761375
changesSincePreviousVersion: TextChange[] = [];
13771376

@@ -1605,7 +1604,7 @@ module ts.server {
16051604
}
16061605
}
16071606

1608-
class LineNode implements LineCollection {
1607+
export class LineNode implements LineCollection {
16091608
totalChars = 0;
16101609
totalLines = 0;
16111610
children: LineCollection[] = [];
@@ -1891,7 +1890,7 @@ module ts.server {
18911890
}
18921891
}
18931892

1894-
class LineLeaf implements LineCollection {
1893+
export class LineLeaf implements LineCollection {
18951894
udata: any;
18961895

18971896
constructor(public text: string) {

src/server/nodeimpl.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path="node.d.ts" />
2+
module ts.server {
3+
export class NodeEnvironment implements Environment {
4+
byteLength = Buffer.byteLength;
5+
hrtime = process.hrtime;
6+
}
7+
}

src/server/server.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module ts.server {
1111
input: process.stdin,
1212
output: process.stdout,
1313
terminal: false,
14-
});
14+
});
1515

1616
class Logger implements ts.server.Logger {
1717
fd = -1;
@@ -170,11 +170,11 @@ module ts.server {
170170
removeFile(file: WatchedFile) {
171171
this.watchedFiles = WatchedFileSet.copyListRemovingItem(file, this.watchedFiles);
172172
}
173-
}
173+
}
174174

175175
class IOSession extends Session {
176-
constructor(host: ServerHost, logger: ts.server.Logger) {
177-
super(host, logger);
176+
constructor(host: ServerHost, env: NodeEnvironment, logger: ts.server.Logger) {
177+
super(host, env, logger);
178178
}
179179

180180
exit() {
@@ -265,7 +265,7 @@ module ts.server {
265265
}
266266

267267
};
268-
var ioSession = new IOSession(ts.sys, logger);
268+
var ioSession = new IOSession(ts.sys, new NodeEnvironment(), logger);
269269
process.on('uncaughtException', function(err: Error) {
270270
ioSession.logError(err, "unknown");
271271
});

src/server/session.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/// <reference path="..\compiler\commandLineParser.ts" />
22
/// <reference path="..\services\services.ts" />
3-
/// <reference path="node.d.ts" />
43
/// <reference path="protocol.d.ts" />
54
/// <reference path="editorServices.ts" />
65

@@ -61,7 +60,7 @@ module ts.server {
6160
};
6261
}
6362

64-
interface PendingErrorCheck {
63+
export interface PendingErrorCheck {
6564
fileName: string;
6665
project: Project;
6766
}
@@ -108,17 +107,32 @@ module ts.server {
108107

109108
export interface ServerHost extends ts.System {
110109
}
110+
111+
export interface Environment {
112+
byteLength: (buf: string, encoding?: string) => number;
113+
hrtime: (start?: number[]) => number[]; //array of seconds, nanoseconds
114+
}
115+
116+
export interface Message {
117+
type: string,
118+
seq: number
119+
}
120+
121+
export interface Event extends Message {
122+
event: string;
123+
body?: any;
124+
}
111125

112126
export class Session {
113127
projectService: ProjectService;
114128
pendingOperation = false;
115129
fileHash: ts.Map<number> = {};
116130
nextFileId = 1;
117-
errorTimer: NodeJS.Timer;
131+
errorTimer: any; /*NodeJS.Timer | number*/
118132
immediateId: any;
119133
changeSeq = 0;
120134

121-
constructor(private host: ServerHost, private logger: Logger) {
135+
constructor(private host: ServerHost, private environment: Environment, private logger: Logger) {
122136
this.projectService =
123137
new ProjectService(host, logger, (eventName,project,fileName) => {
124138
this.handleEvent(eventName, project, fileName);
@@ -149,17 +163,17 @@ module ts.server {
149163
this.host.write(line + this.host.newLine);
150164
}
151165

152-
send(msg: NodeJS._debugger.Message) {
166+
send(msg: Message) {
153167
var json = JSON.stringify(msg);
154168
if (this.logger.isVerbose()) {
155169
this.logger.info(msg.type + ": " + json);
156170
}
157-
this.sendLineToClient('Content-Length: ' + (1 + Buffer.byteLength(json, 'utf8')) +
171+
this.sendLineToClient('Content-Length: ' + (1 + this.environment.byteLength(json, 'utf8')) +
158172
'\r\n\r\n' + json);
159173
}
160174

161175
event(info: any, eventName: string) {
162-
var ev: NodeJS._debugger.Event = {
176+
var ev: Event = {
163177
seq: 0,
164178
type: "event",
165179
event: eventName,
@@ -838,7 +852,7 @@ module ts.server {
838852
onMessage(message: string) {
839853
if (this.logger.isVerbose()) {
840854
this.logger.info("request: " + message);
841-
var start = process.hrtime();
855+
var start = this.environment.hrtime();
842856
}
843857
try {
844858
var request = <protocol.Request>JSON.parse(message);
@@ -980,7 +994,7 @@ module ts.server {
980994
}
981995

982996
if (this.logger.isVerbose()) {
983-
var elapsed = process.hrtime(start);
997+
var elapsed = this.environment.hrtime(start);
984998
var seconds = elapsed[0]
985999
var nanoseconds = elapsed[1];
9861000
var elapsedMs = ((1e9 * seconds) + nanoseconds)/1000000.0;

src/server/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"editorServices.ts",
1313
"protocol.d.ts",
1414
"server.ts",
15+
"nodeimpl.ts",
1516
"session.ts"
1617
]
1718
}

0 commit comments

Comments
 (0)