Skip to content

Commit 5ea1d8b

Browse files
committed
Bit of cleanup, some test fixes, moving some funcs
1 parent dc1a16e commit 5ea1d8b

6 files changed

Lines changed: 175 additions & 157 deletions

File tree

packages/ide/src/fill/electron.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import { clipboard } from "./clipboard";
1313
return [];
1414
};
1515

16+
// This is required to make the fill load in Node without erroring.
1617
if (typeof document === "undefined") {
17-
(<any>global).document = {} as any;
18+
// tslint:disable-next-line no-any
19+
(global as any).document = {} as any;
1820
}
1921

2022
const oldCreateElement: <K extends keyof HTMLElementTagNameMap>(
@@ -52,7 +54,7 @@ const newCreateElement = <K extends keyof HTMLElementTagNameMap>(tagName: K): HT
5254
if (view.contentDocument) {
5355
view.contentDocument.body.id = frameID;
5456
view.contentDocument.body.parentElement!.style.overflow = "hidden";
55-
const script = document.createElement("script");
57+
const script = createElement("script");
5658
script.src = url;
5759
view.contentDocument.head.appendChild(script);
5860
}

packages/ide/src/fill/net.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class Net implements NodeNet {
1313
) {}
1414

1515
public get Socket(): typeof net.Socket {
16-
// @ts-ignore
1716
return this.client.Socket;
1817
}
1918

packages/ide/src/upload.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ export class Upload {
221221

222222
await rm();
223223

224-
reader.addEventListener("load", async () => {
224+
const load = async (): Promise<void> => {
225225
const buffer = new Uint8Array(reader.result as ArrayBuffer);
226226
let bufferOffset = 0;
227227

@@ -259,7 +259,9 @@ export class Upload {
259259
}
260260

261261
seek();
262-
});
262+
};
263+
264+
reader.addEventListener("load", load);
263265

264266
seek();
265267
});

packages/logger/src/logger.ts

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -56,57 +56,6 @@ export const field = <T>(name: string, value: T): Field<T> => {
5656
return new Field(name, value);
5757
};
5858

59-
/**
60-
* Hashes a string.
61-
*/
62-
const djb2 = (str: string): number => {
63-
let hash = 5381;
64-
for (let i = 0; i < str.length; i++) {
65-
hash = ((hash << 5) + hash) + str.charCodeAt(i); /* hash * 33 + c */
66-
}
67-
68-
return hash;
69-
};
70-
71-
/**
72-
* Convert rgb to hex.
73-
*/
74-
const rgbToHex = (r: number, g: number, b: number): string => {
75-
const integer = ((Math.round(r) & 0xFF) << 16)
76-
+ ((Math.round(g) & 0xFF) << 8)
77-
+ (Math.round(b) & 0xFF);
78-
79-
const str = integer.toString(16);
80-
81-
return "#" + "000000".substring(str.length) + str;
82-
};
83-
84-
/**
85-
* Convert fully-formed hex to rgb.
86-
*/
87-
const hexToRgb = (hex: string): [number, number, number] => {
88-
const integer = parseInt(hex.substr(1), 16);
89-
90-
return [
91-
(integer >> 16) & 0xFF,
92-
(integer >> 8) & 0xFF,
93-
integer & 0xFF,
94-
];
95-
};
96-
97-
/**
98-
* Generates a deterministic color from a string using hashing.
99-
*/
100-
const hashStringToColor = (str: string): string => {
101-
const hash = djb2(str);
102-
103-
return rgbToHex(
104-
(hash & 0xFF0000) >> 16,
105-
(hash & 0x00FF00) >> 8,
106-
hash & 0x0000FF,
107-
);
108-
};
109-
11059
/**
11160
* This formats & builds text for logging.
11261
* It should only be used to build one log item at a time since it stores the
@@ -207,7 +156,7 @@ export class BrowserFormatter extends Formatter {
207156
*/
208157
export class ServerFormatter extends Formatter {
209158
public tag(name: string, color: string): void {
210-
const [r, g, b] = hexToRgb(color);
159+
const [r, g, b] = this.hexToRgb(color);
211160
while (name.length < 5) {
212161
name += " ";
213162
}
@@ -220,7 +169,7 @@ export class ServerFormatter extends Formatter {
220169
this.format += "\u001B[1m";
221170
}
222171
if (color) {
223-
const [r, g, b] = hexToRgb(color);
172+
const [r, g, b] = this.hexToRgb(color);
224173
this.format += `\u001B[38;2;${r};${g};${b}m`;
225174
}
226175
this.format += this.getType(arg);
@@ -241,6 +190,19 @@ export class ServerFormatter extends Formatter {
241190
this.args.push(JSON.stringify(obj));
242191
console.log(...this.flush()); // tslint:disable-line no-console
243192
}
193+
194+
/**
195+
* Convert fully-formed hex to rgb.
196+
*/
197+
private hexToRgb(hex: string): [number, number, number] {
198+
const integer = parseInt(hex.substr(1), 16);
199+
200+
return [
201+
(integer >> 16) & 0xFF,
202+
(integer >> 8) & 0xFF,
203+
integer & 0xFF,
204+
];
205+
}
244206
}
245207

246208
/**
@@ -258,7 +220,7 @@ export class Logger {
258220
private readonly defaultFields?: FieldArray,
259221
) {
260222
if (name) {
261-
this.nameColor = hashStringToColor(name);
223+
this.nameColor = this.hashStringToColor(name);
262224
}
263225
const envLevel = typeof global !== "undefined" && typeof global.process !== "undefined" ? global.process.env.LOG_LEVEL : process.env.LOG_LEVEL;
264226
if (envLevel) {
@@ -401,7 +363,7 @@ export class Logger {
401363
const green = expPer < 1 ? max : min;
402364
const red = expPer >= 1 ? max : min;
403365
this._formatter.push(` ${time.identifier}=`, "#3794ff");
404-
this._formatter.push(`${diff}ms`, rgbToHex(red > 0 ? red : 0, green > 0 ? green : 0, 0));
366+
this._formatter.push(`${diff}ms`, this.rgbToHex(red > 0 ? red : 0, green > 0 ? green : 0, 0));
405367
});
406368
}
407369

@@ -413,6 +375,44 @@ export class Logger {
413375
}
414376
// tslint:enable no-console
415377
}
378+
379+
/**
380+
* Hashes a string.
381+
*/
382+
private djb2(str: string): number {
383+
let hash = 5381;
384+
for (let i = 0; i < str.length; i++) {
385+
hash = ((hash << 5) + hash) + str.charCodeAt(i); /* hash * 33 + c */
386+
}
387+
388+
return hash;
389+
}
390+
391+
/**
392+
* Convert rgb to hex.
393+
*/
394+
private rgbToHex(r: number, g: number, b: number): string {
395+
const integer = ((Math.round(r) & 0xFF) << 16)
396+
+ ((Math.round(g) & 0xFF) << 8)
397+
+ (Math.round(b) & 0xFF);
398+
399+
const str = integer.toString(16);
400+
401+
return "#" + "000000".substring(str.length) + str;
402+
}
403+
404+
/**
405+
* Generates a deterministic color from a string using hashing.
406+
*/
407+
private hashStringToColor(str: string): string {
408+
const hash = this.djb2(str);
409+
410+
return this.rgbToHex(
411+
(hash & 0xFF0000) >> 16,
412+
(hash & 0x00FF00) >> 8,
413+
hash & 0x0000FF,
414+
);
415+
}
416416
}
417417

418418
export const logger = new Logger(

packages/protocol/src/browser/client.ts

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { ReadWriteConnection, InitData, OperatingSystem, ISharedProcessData } from "../common/connection";
22
import { NewEvalMessage, ServerMessage, EvalDoneMessage, EvalFailedMessage, TypedValue, ClientMessage, NewSessionMessage, TTYDimensions, SessionOutputMessage, CloseSessionInputMessage, WorkingInitMessage, EvalEventMessage } from "../proto";
3-
import { Emitter, Event } from "@coder/events";
3+
import { Emitter } from "@coder/events";
44
import { logger, field } from "@coder/logger";
55
import { ChildProcess, SpawnOptions, ForkOptions, ServerProcess, ServerSocket, Socket, ServerListener, Server, ActiveEval } from "./command";
66
import { EventEmitter } from "events";
7+
import { Socket as NetSocket } from "net";
78

89
/**
910
* Client accepts an arbitrary connection intended to communicate with the Server.
1011
*/
1112
export class Client {
12-
public readonly Socket: typeof ServerSocket;
13+
public readonly Socket: typeof NetSocket;
1314

1415
private evalId = 0;
1516
private readonly evalDoneEmitter = new Emitter<EvalDoneMessage>();
@@ -47,12 +48,11 @@ export class Client {
4748
});
4849

4950
const that = this;
51+
// @ts-ignore NOTE: this doesn't fully implement net.Socket.
5052
this.Socket = class extends ServerSocket {
51-
5253
public constructor() {
5354
super(that.connection, that.connectionId++, that.registerConnection);
5455
}
55-
5656
};
5757

5858
this.initDataPromise = new Promise((resolve): void => {
@@ -151,39 +151,39 @@ export class Client {
151151
});
152152

153153
const d1 = this.evalDoneEmitter.event((doneMsg) => {
154-
if (doneMsg.getId() === id) {
155-
d1.dispose();
156-
d2.dispose();
154+
if (doneMsg.getId() !== id) {
155+
return;
156+
}
157+
158+
d1.dispose();
159+
d2.dispose();
157160

158-
const resp = doneMsg.getResponse();
159-
if (!resp) {
160-
res();
161-
162-
return;
163-
}
164-
165-
const rt = resp.getType();
166-
// tslint:disable-next-line
167-
let val: any;
168-
switch (rt) {
169-
case TypedValue.Type.BOOLEAN:
170-
val = resp.getValue() === "true";
171-
break;
172-
case TypedValue.Type.NUMBER:
173-
val = parseInt(resp.getValue(), 10);
174-
break;
175-
case TypedValue.Type.OBJECT:
176-
val = JSON.parse(resp.getValue());
177-
break;
178-
case TypedValue.Type.STRING:
179-
val = resp.getValue();
180-
break;
181-
default:
182-
throw new Error(`unsupported typed value ${rt}`);
183-
}
184-
185-
res(val);
161+
const resp = doneMsg.getResponse();
162+
if (!resp) {
163+
return res();
186164
}
165+
166+
const rt = resp.getType();
167+
// tslint:disable-next-line no-any
168+
let val: any;
169+
switch (rt) {
170+
case TypedValue.Type.BOOLEAN:
171+
val = resp.getValue() === "true";
172+
break;
173+
case TypedValue.Type.NUMBER:
174+
val = parseInt(resp.getValue(), 10);
175+
break;
176+
case TypedValue.Type.OBJECT:
177+
val = JSON.parse(resp.getValue());
178+
break;
179+
case TypedValue.Type.STRING:
180+
val = resp.getValue();
181+
break;
182+
default:
183+
throw new Error(`unsupported typed value ${rt}`);
184+
}
185+
186+
res(val);
187187
});
188188

189189
const d2 = this.evalFailedEmitter.event((failedMsg) => {

0 commit comments

Comments
 (0)