Skip to content

Commit f46738b

Browse files
committed
Extract usage of require to separate function which can be tree-shaken by the monaco editor build and thus ignored by webpack
1 parent 5ad2852 commit f46738b

File tree

17 files changed

+71
-47
lines changed

17 files changed

+71
-47
lines changed

src/typings/require.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ interface NodeRequire {
4949
config(data: any): any;
5050
onError: Function;
5151
__$__nodeRequire<T>(moduleName: string): T;
52-
getStats(): ReadonlyArray<LoaderEvent>;
53-
hasDependencyCycle(): boolean;
52+
getStats?(): ReadonlyArray<LoaderEvent>;
53+
hasDependencyCycle?(): boolean;
5454
define(amdModuleId: string, dependencies: string[], callback: (...args: any[]) => any): any;
5555
}
5656

src/vs/base/browser/dom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1199,7 +1199,7 @@ export function asCSSUrl(uri: URI | null | undefined): string {
11991199
if (!uri) {
12001200
return `url('')`;
12011201
}
1202-
return `url('${FileAccess.asBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;
1202+
return `url('${FileAccess.uriToBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;
12031203
}
12041204

12051205
export function asCSSPropertyValue(value: string) {

src/vs/base/browser/markdownRenderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende
126126
// and because of that special rewriting needs to be done
127127
// so that the URI uses a protocol that's understood by
128128
// browsers (like http or https)
129-
return FileAccess.asBrowserUri(uri).toString(true);
129+
return FileAccess.uriToBrowserUri(uri).toString(true);
130130
}
131131
if (!uri) {
132132
return href;

src/vs/base/common/amd.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ export abstract class LoaderStats {
4040
map.set(stat.detail, duration + stat.timestamp);
4141
}
4242

43-
const stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp);
43+
let stats: readonly LoaderEvent[] = [];
44+
if (typeof require.getStats === 'function') {
45+
stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp);
46+
}
4447

4548
for (const stat of stats) {
4649
switch (stat.type) {

src/vs/base/common/network.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,18 @@ class FileAccessImpl {
196196
*
197197
* **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context.
198198
*/
199-
asBrowserUri(uri: URI): URI;
200-
asBrowserUri(moduleId: AppResourcePath | ''): URI;
201-
asBrowserUri(uriOrModule: URI | AppResourcePath | ''): URI {
202-
const uri = this.toUri(uriOrModule, require);
199+
asBrowserUri(resourcePath: AppResourcePath | ''): URI {
200+
const uri = this.toUri(resourcePath, require);
201+
return this.uriToBrowserUri(uri);
202+
}
203203

204+
/**
205+
* Returns a URI to use in contexts where the browser is responsible
206+
* for loading (e.g. fetch()) or when used within the DOM.
207+
*
208+
* **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context.
209+
*/
210+
uriToBrowserUri(uri: URI): URI {
204211
// Handle remote URIs via `RemoteAuthorities`
205212
if (uri.scheme === Schemas.vscodeRemote) {
206213
return RemoteAuthorities.rewrite(uri);
@@ -236,11 +243,16 @@ class FileAccessImpl {
236243
* Returns the `file` URI to use in contexts where node.js
237244
* is responsible for loading.
238245
*/
239-
asFileUri(uri: URI): URI;
240-
asFileUri(moduleId: AppResourcePath | ''): URI;
241-
asFileUri(uriOrModule: URI | AppResourcePath | ''): URI {
242-
const uri = this.toUri(uriOrModule, require);
246+
asFileUri(resourcePath: AppResourcePath | ''): URI {
247+
const uri = this.toUri(resourcePath, require);
248+
return this.uriToFileUri(uri);
249+
}
243250

251+
/**
252+
* Returns the `file` URI to use in contexts where node.js
253+
* is responsible for loading.
254+
*/
255+
uriToFileUri(uri: URI): URI {
244256
// Only convert the URI if it is `vscode-file:` scheme
245257
if (uri.scheme === Schemas.vscodeFileResource) {
246258
return uri.with({

src/vs/base/test/common/network.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ suite('network', () => {
1515

1616
// asCodeUri() & asFileUri(): simple, without authority
1717
let originalFileUri = URI.file('network.test.ts');
18-
let browserUri = FileAccess.asBrowserUri(originalFileUri);
18+
let browserUri = FileAccess.uriToBrowserUri(originalFileUri);
1919
assert.ok(browserUri.authority.length > 0);
20-
let fileUri = FileAccess.asFileUri(browserUri);
20+
let fileUri = FileAccess.uriToFileUri(browserUri);
2121
assert.strictEqual(fileUri.authority.length, 0);
2222
assert(isEqual(originalFileUri, fileUri));
2323

2424
// asCodeUri() & asFileUri(): with authority
2525
originalFileUri = URI.file('network.test.ts').with({ authority: 'test-authority' });
26-
browserUri = FileAccess.asBrowserUri(originalFileUri);
26+
browserUri = FileAccess.uriToBrowserUri(originalFileUri);
2727
assert.strictEqual(browserUri.authority, originalFileUri.authority);
28-
fileUri = FileAccess.asFileUri(browserUri);
28+
fileUri = FileAccess.uriToFileUri(browserUri);
2929
assert(isEqual(originalFileUri, fileUri));
3030
});
3131

@@ -39,31 +39,31 @@ suite('network', () => {
3939

4040
(isWeb ? test.skip : test)('FileAccess: query and fragment is dropped (native)', () => {
4141
const originalFileUri = URI.file('network.test.ts').with({ query: 'foo=bar', fragment: 'something' });
42-
const browserUri = FileAccess.asBrowserUri(originalFileUri);
42+
const browserUri = FileAccess.uriToBrowserUri(originalFileUri);
4343
assert.strictEqual(browserUri.query, '');
4444
assert.strictEqual(browserUri.fragment, '');
4545
});
4646

4747
(isWeb ? test.skip : test)('FileAccess: query and fragment is kept if URI is already of same scheme (native)', () => {
4848
const originalFileUri = URI.file('network.test.ts').with({ query: 'foo=bar', fragment: 'something' });
49-
const browserUri = FileAccess.asBrowserUri(originalFileUri.with({ scheme: Schemas.vscodeFileResource }));
49+
const browserUri = FileAccess.uriToBrowserUri(originalFileUri.with({ scheme: Schemas.vscodeFileResource }));
5050
assert.strictEqual(browserUri.query, 'foo=bar');
5151
assert.strictEqual(browserUri.fragment, 'something');
5252

53-
const fileUri = FileAccess.asFileUri(originalFileUri);
53+
const fileUri = FileAccess.uriToFileUri(originalFileUri);
5454
assert.strictEqual(fileUri.query, 'foo=bar');
5555
assert.strictEqual(fileUri.fragment, 'something');
5656
});
5757

5858
(isWeb ? test.skip : test)('FileAccess: web', () => {
5959
const originalHttpsUri = URI.file('network.test.ts').with({ scheme: 'https' });
60-
const browserUri = FileAccess.asBrowserUri(originalHttpsUri);
60+
const browserUri = FileAccess.uriToBrowserUri(originalHttpsUri);
6161
assert.strictEqual(originalHttpsUri.toString(), browserUri.toString());
6262
});
6363

6464
test('FileAccess: remote URIs', () => {
6565
const originalRemoteUri = URI.file('network.test.ts').with({ scheme: Schemas.vscodeRemote });
66-
const browserUri = FileAccess.asBrowserUri(originalRemoteUri);
66+
const browserUri = FileAccess.uriToBrowserUri(originalRemoteUri);
6767
assert.notStrictEqual(originalRemoteUri.scheme, browserUri.scheme);
6868
});
6969
});

src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderServ
3030
}
3131

3232
async readExtensionResource(uri: URI): Promise<string> {
33-
uri = FileAccess.asBrowserUri(uri);
33+
uri = FileAccess.uriToBrowserUri(uri);
3434

3535
if (uri.scheme !== Schemas.http && uri.scheme !== Schemas.https) {
3636
const result = await this._fileService.readFile(uri);

src/vs/platform/protocol/electron-main/protocolMainService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class ProtocolMainService extends Disposable implements IProtocolMainServ
127127

128128
// 2.) Use `FileAccess.asFileUri` to convert back from a
129129
// `vscode-file:` URI to a `file:` URI.
130-
const unnormalizedFileUri = FileAccess.asFileUri(requestUri);
130+
const unnormalizedFileUri = FileAccess.uriToFileUri(requestUri);
131131

132132
// 3.) Strip anything from the URI that could result in
133133
// relative paths (such as "..") by using `normalize`

src/vs/workbench/api/browser/mainThreadExtensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha
189189
}
190190

191191
async $asBrowserUri(uri: UriComponents): Promise<UriComponents> {
192-
return FileAccess.asBrowserUri(URI.revive(uri));
192+
return FileAccess.uriToBrowserUri(URI.revive(uri));
193193
}
194194
}
195195

src/vs/workbench/api/worker/extensionHostWorker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ if ((<any>self).Worker) {
9595
const _Worker = (<any>self).Worker;
9696
Worker = <any>function (stringUrl: string | URL, options?: WorkerOptions) {
9797
if (/^file:/i.test(stringUrl.toString())) {
98-
stringUrl = FileAccess.asBrowserUri(URI.parse(stringUrl.toString())).toString(true);
98+
stringUrl = FileAccess.uriToBrowserUri(URI.parse(stringUrl.toString())).toString(true);
9999
} else if (/^vscode-remote:/i.test(stringUrl.toString())) {
100100
// Supporting transformation of vscode-remote URIs requires an async call to the main thread,
101101
// but we cannot do this call from within the embedded Worker, and the only way out would be

0 commit comments

Comments
 (0)