34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
|
||
|
import * as vscode from 'vscode';
|
||
|
|
||
|
export interface WebviewResourceProvider {
|
||
|
asWebviewUri(resource: vscode.Uri): vscode.Uri;
|
||
|
|
||
|
readonly cspSource: string;
|
||
|
}
|
||
|
|
||
|
export function normalizeResource(
|
||
|
base: vscode.Uri,
|
||
|
resource: vscode.Uri
|
||
|
): vscode.Uri {
|
||
|
// If we have a windows path and are loading a workspace with an authority,
|
||
|
// make sure we use a unc path with an explicit localhost authority.
|
||
|
//
|
||
|
// Otherwise, the `<base>` rule will insert the authority into the resolved resource
|
||
|
// URI incorrectly.
|
||
|
if (base.authority && !resource.authority) {
|
||
|
const driveMatch = resource.path.match(/^\/(\w):\//);
|
||
|
if (driveMatch) {
|
||
|
return vscode.Uri.file(`\\\\localhost\\${driveMatch[1]}$\\${resource.fsPath.replace(/^\w:\\/, '')}`).with({
|
||
|
fragment: resource.fragment,
|
||
|
query: resource.query
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
return resource;
|
||
|
}
|