Skip to content

Commit f4090e8

Browse files
committed
fixup! big refactor
1 parent cca2c1f commit f4090e8

File tree

2 files changed

+49
-72
lines changed

2 files changed

+49
-72
lines changed

src/browser/pages/vscode.ts

+16-25
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,13 @@ export function getNlsConfiguration(document: Document) {
5454
return JSON.parse(nlsConfig) as NlsConfiguration
5555
}
5656

57-
type RegisterRequireOnSelfType = {
58-
// NOTE@jsjoeio
59-
// We get the self type by looking at window.self.
60-
self: Window & typeof globalThis
57+
type GetLoaderParams = {
6158
origin: string
6259
nlsConfig: NlsConfiguration
6360
options: Options
6461
}
6562

66-
type RequireOnSelfType = {
63+
type Loader = {
6764
baseUrl: string
6865
recordStats: boolean
6966
paths: {
@@ -73,36 +70,30 @@ type RequireOnSelfType = {
7370
}
7471

7572
/**
76-
* A helper function to register the require on self.
73+
* A helper function to get the require loader
7774
*
78-
* The require property is used by VSCode/code-server
75+
* This used by VSCode/code-server
7976
* to load files.
8077
*
8178
* We extracted the logic into a function so that
8279
* it's easier to test.
8380
**/
84-
export function registerRequireOnSelf({ self, origin, nlsConfig, options }: RegisterRequireOnSelfType) {
81+
export function getLoader({ origin, nlsConfig, options }: GetLoaderParams) {
8582
const errorMsgPrefix = "[vscode]"
8683

87-
if (!self) {
88-
throw new Error(`${errorMsgPrefix} Could not register require on self. self is undefined.`)
89-
}
90-
9184
if (!origin) {
92-
throw new Error(`${errorMsgPrefix} Could not register require on self. origin is undefined or missing.`)
85+
throw new Error(`${errorMsgPrefix} Could not get loader. origin is undefined or missing.`)
9386
}
9487

9588
if (!options || !options.csStaticBase) {
96-
throw new Error(
97-
`${errorMsgPrefix} Could not register require on self. options or options.csStaticBase is undefined or missing.`,
98-
)
89+
throw new Error(`${errorMsgPrefix} Could not get loader. options or options.csStaticBase is undefined or missing.`)
9990
}
10091

10192
if (!nlsConfig) {
102-
throw new Error(`${errorMsgPrefix} Could not register require on self. nlsConfig is undefined.`)
93+
throw new Error(`${errorMsgPrefix} Could not get loader. nlsConfig is undefined.`)
10394
}
10495

105-
const requireOnSelf: RequireOnSelfType = {
96+
const loader: Loader = {
10697
// Without the full URL VS Code will try to load file://.
10798
baseUrl: `${origin}${options.csStaticBase}/lib/vscode/out`,
10899
recordStats: true,
@@ -120,12 +111,7 @@ export function registerRequireOnSelf({ self, origin, nlsConfig, options }: Regi
120111
"vs/nls": nlsConfig,
121112
}
122113

123-
// TODO@jsjoeio
124-
// I'm not sure how to properly type cast this
125-
// This might be our best bet
126-
// Source: https://stackoverflow.com/a/30740935
127-
type FixMeLater = any
128-
;(self.require as FixMeLater) = requireOnSelf
114+
return loader
129115
}
130116

131117
try {
@@ -148,7 +134,12 @@ try {
148134
.catch(cb)
149135
}
150136
}
151-
registerRequireOnSelf({
137+
// TODO@jsjoeio
138+
// I'm not sure how to properly type cast this
139+
// This might be our best bet
140+
// Source: https://stackoverflow.com/a/30740935
141+
type FixMeLater = any
142+
;(self.require as FixMeLater) = getLoader({
152143
self,
153144
nlsConfig,
154145
options,

test/unit/browser/pages/vscode.test.ts

+33-47
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { JSDOM } from "jsdom"
55
import {
66
getNlsConfiguration,
77
nlsConfigElementId,
8-
registerRequireOnSelf,
8+
getLoader,
99
setBodyBackgroundToThemeBackgroundColor,
1010
} from "../../../../src/browser/pages/vscode"
1111

@@ -176,31 +176,7 @@ describe("vscode", () => {
176176
localStorage.removeItem("colorThemeData")
177177
})
178178
})
179-
describe("registerRequireOnSelf", () => {
180-
it("should throw an error if self is undefined", () => {
181-
const options = {
182-
base: "/",
183-
csStaticBase: "/hello",
184-
logLevel: 1,
185-
}
186-
const nlsConfig = {
187-
first: "Jane",
188-
last: "Doe",
189-
locale: "en",
190-
availableLanguages: {},
191-
}
192-
const errorMsgPrefix = "[vscode]"
193-
const errorMessage = `${errorMsgPrefix} Could not register require on self. self is undefined.`
194-
expect(() => {
195-
registerRequireOnSelf({
196-
// @ts-expect-error We are checking what happens if self is undefined.
197-
self: undefined,
198-
window: global.window,
199-
nlsConfig: nlsConfig,
200-
options,
201-
})
202-
}).toThrowError(errorMessage)
203-
})
179+
describe("getLoader", () => {
204180
it("should throw an error if window is undefined", () => {
205181
const options = {
206182
base: "/",
@@ -214,11 +190,9 @@ describe("vscode", () => {
214190
availableLanguages: {},
215191
}
216192
const errorMsgPrefix = "[vscode]"
217-
const errorMessage = `${errorMsgPrefix} Could not register require on self. origin is undefined or missing.`
218-
const mockSelf = {} as Window & typeof globalThis
193+
const errorMessage = `${errorMsgPrefix} Could not get loader. origin is undefined or missing.`
219194
expect(() => {
220-
registerRequireOnSelf({
221-
self: mockSelf,
195+
getLoader({
222196
// @ts-expect-error We need to test if window is undefined
223197
origin: undefined,
224198
nlsConfig: nlsConfig,
@@ -239,19 +213,16 @@ describe("vscode", () => {
239213
availableLanguages: {},
240214
}
241215
const errorMsgPrefix = "[vscode]"
242-
const errorMessage = `${errorMsgPrefix} Could not register require on self. options or options.csStaticBase is undefined or missing.`
243-
const mockSelf = {} as Window & typeof globalThis
216+
const errorMessage = `${errorMsgPrefix} Could not get loader. options or options.csStaticBase is undefined or missing.`
244217
expect(() => {
245-
registerRequireOnSelf({
246-
self: mockSelf,
218+
getLoader({
247219
origin: "localhost",
248220
nlsConfig: nlsConfig,
249221
options,
250222
})
251223
}).toThrowError(errorMessage)
252224
expect(() => {
253-
registerRequireOnSelf({
254-
self: mockSelf,
225+
getLoader({
255226
origin: "localhost",
256227
nlsConfig: nlsConfig,
257228
// @ts-expect-error We need to check what happens when options is undefined
@@ -266,19 +237,17 @@ describe("vscode", () => {
266237
logLevel: 1,
267238
}
268239
const errorMsgPrefix = "[vscode]"
269-
const errorMessage = `${errorMsgPrefix} Could not register require on self. nlsConfig is undefined.`
270-
const mockSelf = {} as Window & typeof globalThis
240+
const errorMessage = `${errorMsgPrefix} Could not get loader. nlsConfig is undefined.`
271241
expect(() => {
272-
registerRequireOnSelf({
273-
self: mockSelf,
242+
getLoader({
274243
origin: "localthost",
275244
// @ts-expect-error We need to check that it works when this is undefined
276245
nlsConfig: undefined,
277246
options,
278247
})
279248
}).toThrowError(errorMessage)
280249
})
281-
it("should declare require on self", () => {
250+
it("should return a loader object", () => {
282251
const options = {
283252
base: "/",
284253
csStaticBase: "/",
@@ -290,16 +259,33 @@ describe("vscode", () => {
290259
locale: "en",
291260
availableLanguages: {},
292261
}
293-
const mockSelf = {} as Window & typeof globalThis
294-
registerRequireOnSelf({
295-
self: mockSelf,
296-
origin: "localthost",
262+
const loader = getLoader({
263+
origin: "localhost",
297264
nlsConfig: nlsConfig,
298265
options,
299266
})
300267

301-
const hasRequireProperty = Object.prototype.hasOwnProperty.call(mockSelf, "require")
302-
expect(hasRequireProperty).toBeTruthy()
268+
expect(loader).toStrictEqual({
269+
baseUrl: "localhost//lib/vscode/out",
270+
paths: {
271+
"iconv-lite-umd": "../node_modules/iconv-lite-umd/lib/iconv-lite-umd.js",
272+
jschardet: "../node_modules/jschardet/dist/jschardet.min.js",
273+
"tas-client-umd": "../node_modules/tas-client-umd/lib/tas-client-umd.js",
274+
"vscode-oniguruma": "../node_modules/vscode-oniguruma/release/main",
275+
"vscode-textmate": "../node_modules/vscode-textmate/release/main",
276+
xterm: "../node_modules/xterm/lib/xterm.js",
277+
"xterm-addon-search": "../node_modules/xterm-addon-search/lib/xterm-addon-search.js",
278+
"xterm-addon-unicode11": "../node_modules/xterm-addon-unicode11/lib/xterm-addon-unicode11.js",
279+
"xterm-addon-webgl": "../node_modules/xterm-addon-webgl/lib/xterm-addon-webgl.js",
280+
},
281+
recordStats: true,
282+
"vs/nls": {
283+
availableLanguages: {},
284+
first: "Jane",
285+
last: "Doe",
286+
locale: "en",
287+
},
288+
})
303289
})
304290
})
305291
})

0 commit comments

Comments
 (0)