UNPKG

@sussudio/platform

Version:

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

306 lines (305 loc) 11.5 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; }; import { toLocalISOString } from '@sussudio/base/common/date.mjs'; import { memoize } from '@sussudio/base/common/decorators.mjs'; import { FileAccess } from '@sussudio/base/common/network.mjs'; import { dirname, join, normalize, resolve } from '@sussudio/base/common/path.mjs'; import { env } from '@sussudio/base/common/process.mjs'; import { joinPath } from '@sussudio/base/common/resources.mjs'; import { URI } from '@sussudio/base/common/uri.mjs'; export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+):(.+)$/; export class AbstractNativeEnvironmentService { _args; paths; productService; get appRoot() { return dirname(FileAccess.asFileUri('').fsPath); } get userHome() { return URI.file(this.paths.homeDir); } get userDataPath() { return this.paths.userDataDir; } get appSettingsHome() { return URI.file(join(this.userDataPath, 'User')); } get tmpDir() { return URI.file(this.paths.tmpDir); } get cacheHome() { return URI.file(this.userDataPath); } get stateResource() { return joinPath(this.appSettingsHome, 'globalStorage', 'storage.json'); } get userRoamingDataHome() { return this.appSettingsHome; } get userDataSyncHome() { return joinPath(this.userRoamingDataHome, 'sync'); } get logsPath() { if (!this.args.logsPath) { const key = toLocalISOString(new Date()).replace(/-|:|\.\d+Z$/g, ''); this.args.logsPath = join(this.userDataPath, 'logs', key); } return this.args.logsPath; } get userDataSyncLogResource() { return URI.file(join(this.logsPath, 'userDataSync.log')); } get editSessionsLogResource() { return URI.file(join(this.logsPath, 'editSessions.log')); } get sync() { return this.args.sync; } get machineSettingsResource() { return joinPath(URI.file(join(this.userDataPath, 'Machine')), 'settings.json'); } get workspaceStorageHome() { return joinPath(this.appSettingsHome, 'workspaceStorage'); } get localHistoryHome() { return joinPath(this.appSettingsHome, 'History'); } get keyboardLayoutResource() { return joinPath(this.userRoamingDataHome, 'keyboardLayout.json'); } get argvResource() { const vscodePortable = env['VSCODE_PORTABLE']; if (vscodePortable) { return URI.file(join(vscodePortable, 'argv.json')); } return joinPath(this.userHome, this.productService.dataFolderName, 'argv.json'); } get isExtensionDevelopment() { return !!this.args.extensionDevelopmentPath; } get untitledWorkspacesHome() { return URI.file(join(this.userDataPath, 'Workspaces')); } get installSourcePath() { return join(this.userDataPath, 'installSource'); } get builtinExtensionsPath() { const cliBuiltinExtensionsDir = this.args['builtin-extensions-dir']; if (cliBuiltinExtensionsDir) { return resolve(cliBuiltinExtensionsDir); } return normalize(join(FileAccess.asFileUri('').fsPath, '..', 'extensions')); } get extensionsDownloadLocation() { const cliExtensionsDownloadDir = this.args['extensions-download-dir']; if (cliExtensionsDownloadDir) { return URI.file(resolve(cliExtensionsDownloadDir)); } return URI.file(join(this.userDataPath, 'CachedExtensionVSIXs')); } get extensionsPath() { const cliExtensionsDir = this.args['extensions-dir']; if (cliExtensionsDir) { return resolve(cliExtensionsDir); } const vscodeExtensions = env['VSCODE_EXTENSIONS']; if (vscodeExtensions) { return vscodeExtensions; } const vscodePortable = env['VSCODE_PORTABLE']; if (vscodePortable) { return join(vscodePortable, 'extensions'); } return joinPath(this.userHome, this.productService.dataFolderName, 'extensions').fsPath; } get extensionDevelopmentLocationURI() { const extensionDevelopmentPaths = this.args.extensionDevelopmentPath; if (Array.isArray(extensionDevelopmentPaths)) { return extensionDevelopmentPaths.map((extensionDevelopmentPath) => { if (/^[^:/?#]+?:\/\//.test(extensionDevelopmentPath)) { return URI.parse(extensionDevelopmentPath); } return URI.file(normalize(extensionDevelopmentPath)); }); } return undefined; } get extensionDevelopmentKind() { return this.args.extensionDevelopmentKind?.map((kind) => kind === 'ui' || kind === 'workspace' || kind === 'web' ? kind : 'workspace', ); } get extensionTestsLocationURI() { const extensionTestsPath = this.args.extensionTestsPath; if (extensionTestsPath) { if (/^[^:/?#]+?:\/\//.test(extensionTestsPath)) { return URI.parse(extensionTestsPath); } return URI.file(normalize(extensionTestsPath)); } return undefined; } get disableExtensions() { if (this.args['disable-extensions']) { return true; } const disableExtensions = this.args['disable-extension']; if (disableExtensions) { if (typeof disableExtensions === 'string') { return [disableExtensions]; } if (Array.isArray(disableExtensions) && disableExtensions.length > 0) { return disableExtensions; } } return false; } get debugExtensionHost() { return parseExtensionHostPort(this.args, this.isBuilt); } get debugRenderer() { return !!this.args.debugRenderer; } get isBuilt() { return !env['VSCODE_DEV']; } get verbose() { return !!this.args.verbose; } get logLevel() { return this.args.log?.find((entry) => !EXTENSION_IDENTIFIER_WITH_LOG_REGEX.test(entry)); } get extensionLogLevel() { const result = []; for (const entry of this.args.log || []) { const matches = EXTENSION_IDENTIFIER_WITH_LOG_REGEX.exec(entry); if (matches && matches[1] && matches[2]) { result.push([matches[1], matches[2]]); } } return result.length ? result : undefined; } get serviceMachineIdResource() { return joinPath(URI.file(this.userDataPath), 'machineid'); } get crashReporterId() { return this.args['crash-reporter-id']; } get crashReporterDirectory() { return this.args['crash-reporter-directory']; } get telemetryLogResource() { return URI.file(join(this.logsPath, 'telemetry.log')); } get disableTelemetry() { return !!this.args['disable-telemetry']; } get disableWorkspaceTrust() { return !!this.args['disable-workspace-trust']; } get policyFile() { if (this.args['__enable-file-policy']) { const vscodePortable = env['VSCODE_PORTABLE']; if (vscodePortable) { return URI.file(join(vscodePortable, 'policy.json')); } return joinPath(this.userHome, this.productService.dataFolderName, 'policy.json'); } return undefined; } editSessionId = this.args['editSessionId']; get continueOn() { return this.args['continueOn']; } set continueOn(value) { this.args['continueOn'] = value; } get args() { return this._args; } constructor(_args, paths, productService) { this._args = _args; this.paths = paths; this.productService = productService; } } __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'appRoot', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'userHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'userDataPath', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'appSettingsHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'tmpDir', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'cacheHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'stateResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'userRoamingDataHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'userDataSyncHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'userDataSyncLogResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'editSessionsLogResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'sync', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'machineSettingsResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'workspaceStorageHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'localHistoryHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'keyboardLayoutResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'argvResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'isExtensionDevelopment', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'untitledWorkspacesHome', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'installSourcePath', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'builtinExtensionsPath', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'extensionsPath', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'extensionDevelopmentLocationURI', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'extensionDevelopmentKind', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'extensionTestsLocationURI', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'debugExtensionHost', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'logLevel', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'extensionLogLevel', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'serviceMachineIdResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'telemetryLogResource', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'disableWorkspaceTrust', null); __decorate([memoize], AbstractNativeEnvironmentService.prototype, 'policyFile', null); export function parseExtensionHostPort(args, isBuild) { return parseDebugParams( args['inspect-extensions'], args['inspect-brk-extensions'], 5870, isBuild, args.debugId, args.extensionEnvironment, ); } export function parsePtyHostPort(args, isBuild) { return parseDebugParams( args['inspect-ptyhost'], args['inspect-brk-ptyhost'], 5877, isBuild, args.extensionEnvironment, ); } function parseDebugParams(debugArg, debugBrkArg, defaultBuildPort, isBuild, debugId, environmentString) { const portStr = debugBrkArg || debugArg; const port = Number(portStr) || (!isBuild ? defaultBuildPort : null); const brk = port ? Boolean(!!debugBrkArg) : false; let env; if (environmentString) { try { env = JSON.parse(environmentString); } catch { // ignore } } return { port, break: brk, debugId, env }; }