UNPKG

@sussudio/platform

Version:

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

45 lines (44 loc) 2.04 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { join } from '@sussudio/base/common/path.mjs'; import { Promises } from '@sussudio/base/node/pfs.mjs'; export async function buildTelemetryMessage(appRoot, extensionsPath) { const mergedTelemetry = Object.create(null); // Simple function to merge the telemetry into one json object const mergeTelemetry = (contents, dirName) => { const telemetryData = JSON.parse(contents); mergedTelemetry[dirName] = telemetryData; }; if (extensionsPath) { const dirs = []; const files = await Promises.readdir(extensionsPath); for (const file of files) { try { const fileStat = await Promises.stat(join(extensionsPath, file)); if (fileStat.isDirectory()) { dirs.push(file); } } catch { // This handles case where broken symbolic links can cause statSync to throw and error } } const telemetryJsonFolders = []; for (const dir of dirs) { const files = (await Promises.readdir(join(extensionsPath, dir))).filter((file) => file === 'telemetry.json'); if (files.length === 1) { telemetryJsonFolders.push(dir); // // We know it contains a telemetry.json file so we add it to the list of folders which have one } } for (const folder of telemetryJsonFolders) { const contents = (await Promises.readFile(join(extensionsPath, folder, 'telemetry.json'))).toString(); mergeTelemetry(contents, folder); } } let contents = (await Promises.readFile(join(appRoot, 'telemetry-core.json'))).toString(); mergeTelemetry(contents, 'vscode-core'); contents = (await Promises.readFile(join(appRoot, 'telemetry-extensions.json'))).toString(); mergeTelemetry(contents, 'vscode-extensions'); return JSON.stringify(mergedTelemetry, null, 4); }