@mui/x-telemetry
Version:
MUI X Telemetry.
54 lines (50 loc) • 2.87 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _crypto = require("crypto");
var _url = require("url");
var _getEnvironmentInfo = _interopRequireDefault(require("./get-environment-info"));
var _getProjectId = require("./get-project-id");
var _getMachineId = _interopRequireDefault(require("./get-machine-id"));
var _storage = require("./storage");
// It's a flat build, both CJS and ESM files live in the same directory.
// postinstall/index.mjs is at <pkg-root>/postinstall/index.mjs,
// so we go up one level to reach the package root.
const dirname = typeof __dirname === 'string' ? __dirname : _path.default.dirname((0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString()));
(async () => {
// If Node.js support permissions, we need to check if the current user has
// the necessary permissions to write to the file system.
if (typeof process.permission !== 'undefined' && !(process.permission.has('fs.read') && process.permission.has('fs.write'))) {
return;
}
const storage = await _storage.TelemetryStorage.init({
distDir: process.cwd()
});
const [environmentInfo, repoHash, postinstallPackageNameHash, rootPathHash, machineId] = await Promise.all([(0, _getEnvironmentInfo.default)(), (0, _getProjectId.getAnonymousRepoHash)(), (0, _getProjectId.getAnonymousPackageNameHash)(), (0, _getProjectId.getAnonymousRootPathHash)(), (0, _getMachineId.default)()]);
// Compute projectId from the resolved signals (no duplicate calls)
const projectId = repoHash || postinstallPackageNameHash || rootPathHash;
const contextData = {
config: {
isInitialized: true
},
traits: (0, _extends2.default)({}, environmentInfo, {
machineId,
repoHash,
postinstallPackageNameHash,
rootPathHash,
projectId,
sessionId: (0, _crypto.randomBytes)(32).toString('hex'),
anonymousId: storage.anonymousId
})
};
const packageRoot = _path.default.resolve(dirname, '..');
const content = JSON.stringify(contextData, null, 2);
// ESM: context.mjs
_fs.default.writeFileSync(_path.default.resolve(packageRoot, 'context.mjs'), `export default ${content};`);
// CJS: context.js
_fs.default.writeFileSync(_path.default.resolve(packageRoot, 'context.js'), [`"use strict";`, `Object.defineProperty(exports, "__esModule", { value: true });`, `exports.default = void 0;`, `var _default = exports.default = ${content};`].join('\n'));
})().catch(error => {
console.error('[telemetry] Failed to make initialization. Please, report error to MUI X team:\n' + 'https://mui.com/r/x-telemetry-postinstall-troubleshoot\n', error);
});