UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

91 lines (90 loc) 3.9 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc, d; if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); }; }; import { Emitter } from '@sussudio/base/common/event.mjs'; import { Disposable } from '@sussudio/base/common/lifecycle.mjs'; import { RemoteAuthorities } from '@sussudio/base/common/network.mjs'; import { IProductService } from '../../product/common/productService.mjs'; import { getRemoteServerRootPath, parseAuthorityWithOptionalPort } from '../common/remoteHosts.mjs'; let RemoteAuthorityResolverService = class RemoteAuthorityResolverService extends Disposable { _onDidChangeConnectionData = this._register(new Emitter()); onDidChangeConnectionData = this._onDidChangeConnectionData.event; _promiseCache = new Map(); _cache = new Map(); _connectionToken; _connectionTokens; constructor(productService, connectionToken, resourceUriProvider) { super(); this._connectionToken = connectionToken; this._connectionTokens = new Map(); if (resourceUriProvider) { RemoteAuthorities.setDelegate(resourceUriProvider); } RemoteAuthorities.setServerRootPath(getRemoteServerRootPath(productService)); } async resolveAuthority(authority) { let result = this._promiseCache.get(authority); if (!result) { result = this._doResolveAuthority(authority); this._promiseCache.set(authority, result); } return result; } async getCanonicalURI(uri) { return uri; } getConnectionData(authority) { if (!this._cache.has(authority)) { return null; } const resolverResult = this._cache.get(authority); const connectionToken = this._connectionTokens.get(authority) || resolverResult.authority.connectionToken; return { host: resolverResult.authority.host, port: resolverResult.authority.port, connectionToken: connectionToken, }; } async _doResolveAuthority(authority) { const connectionToken = await Promise.resolve(this._connectionTokens.get(authority) || this._connectionToken); const defaultPort = /^https:/.test(window.location.href) ? 443 : 80; const { host, port } = parseAuthorityWithOptionalPort(authority, defaultPort); const result = { authority: { authority, host: host, port: port, connectionToken } }; RemoteAuthorities.set(authority, result.authority.host, result.authority.port); this._cache.set(authority, result); this._onDidChangeConnectionData.fire(); return result; } _clearResolvedAuthority(authority) {} _setResolvedAuthority(resolvedAuthority) {} _setResolvedAuthorityError(authority, err) {} _setAuthorityConnectionToken(authority, connectionToken) { this._connectionTokens.set(authority, connectionToken); RemoteAuthorities.setConnectionToken(authority, connectionToken); this._onDidChangeConnectionData.fire(); } _setCanonicalURIProvider(provider) {} }; RemoteAuthorityResolverService = __decorate([__param(0, IProductService)], RemoteAuthorityResolverService); export { RemoteAuthorityResolverService };