// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. Object.defineProperty(exports, "__esModule", { value: true }); exports.readUsageDataSettings = exports.groupNameExists = exports.writeUsageDataJsonData = exports.readUsageDataObjectProperty = exports.readUsageDataLevel = exports.readUsageDataJsonData = exports.readDeviceID = exports.modifyUsageDataJsonData = exports.needToPromptForUsageData = void 0; const fs = require("fs"); const defaults = require("./defaults"); const uuid_1 = require("uuid"); /** * Allows developer to check if the program has already prompted before * @param groupName Group name of the usage data object * @returns Boolean of whether the program should prompt */ function needToPromptForUsageData(groupName) { return !groupNameExists(groupName); } exports.needToPromptForUsageData = needToPromptForUsageData; /** * Allows developer to add or modify a specific property to the group * @param groupName Group name of property * @param property Property that will be created or modified * @param value Property's value that will be assigned */ function modifyUsageDataJsonData(groupName, property, value) { try { if (readUsageDataJsonData()) { const usageDataJsonData = readUsageDataJsonData(); if (!groupNameExists(groupName)) { usageDataJsonData.usageDataInstances[groupName] = { usageDataLevel: String, }; } usageDataJsonData.usageDataInstances[groupName][property] = value; if (!usageDataJsonData.usageDataInstances["deviceID"]) { usageDataJsonData.usageDataInstances["deviceID"] = (0, uuid_1.v4)(); } fs.writeFileSync(defaults.usageDataJsonFilePath, JSON.stringify(usageDataJsonData, null, 2)); } else { let usageDataJsonData = {}; usageDataJsonData[groupName] = value; usageDataJsonData = { usageDataInstances: usageDataJsonData }; usageDataJsonData = { usageDataInstances: { [groupName]: { [property]: value }, deviceID: (0, uuid_1.v4)() }, }; fs.writeFileSync(defaults.usageDataJsonFilePath, JSON.stringify(usageDataJsonData, null, 2)); } } catch (err) { throw new Error(err); } } exports.modifyUsageDataJsonData = modifyUsageDataJsonData; /** * Returns the session identifier * @returns The uuid of the session identifier */ function readDeviceID() { var _a; const jsonData = readUsageDataJsonData(); return (_a = jsonData === null || jsonData === void 0 ? void 0 : jsonData.usageDataInstances.deviceID) !== null && _a !== void 0 ? _a : ""; } exports.readDeviceID = readDeviceID; /** * Reads data from the usage data json config file * @returns Parsed object from json file if it exists */ function readUsageDataJsonData() { if (fs.existsSync(defaults.usageDataJsonFilePath)) { const jsonData = fs.readFileSync(defaults.usageDataJsonFilePath, "utf8"); return JSON.parse(jsonData.toString()); } } exports.readUsageDataJsonData = readUsageDataJsonData; /** * Returns whether usage data is enabled on the usage data object * @param groupName Group name to search for in the specified json data * @returns Whether usage data is enabled specific to the group name */ function readUsageDataLevel(groupName) { const jsonData = readUsageDataJsonData(); return jsonData.usageDataInstances[groupName].usageDataLevel; } exports.readUsageDataLevel = readUsageDataLevel; /** * Returns whether usage data is enabled on the usage data object * @param groupName Group name to search for in the specified json data * @param propertyName Property name that will be used to access and return the associated value * @returns Property of the specific group name */ function readUsageDataObjectProperty(groupName, propertyName) { const jsonData = readUsageDataJsonData(); return jsonData.usageDataInstances[groupName][propertyName]; } exports.readUsageDataObjectProperty = readUsageDataObjectProperty; /** * Writes to usage data config file either appending to already existing file or creating new file * @param groupName Group name of usage data object * @param level usageDataLevel Whether user is sending none or full usage data */ function writeUsageDataJsonData(groupName, level) { if (fs.existsSync(defaults.usageDataJsonFilePath) && fs.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "" && fs.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "undefined") { if (groupNameExists(groupName)) { modifyUsageDataJsonData(groupName, "usageDataLevel", level); } else { const usageDataJsonData = readUsageDataJsonData(); usageDataJsonData.usageDataInstances[groupName] = { usageDataLevel: String, }; usageDataJsonData.usageDataInstances[groupName].usageDataLevel = level; if (!usageDataJsonData.usageDataInstances["deviceID"]) { usageDataJsonData.usageDataInstances["deviceID"] = (0, uuid_1.v4)(); } fs.writeFileSync(defaults.usageDataJsonFilePath, JSON.stringify(usageDataJsonData, null, 2)); } } else { let usageDataJsonData = {}; usageDataJsonData[groupName] = level; usageDataJsonData = { usageDataInstances: usageDataJsonData }; usageDataJsonData = { usageDataInstances: { [groupName]: { ["usageDataLevel"]: level }, deviceID: (0, uuid_1.v4)() }, }; fs.writeFileSync(defaults.usageDataJsonFilePath, JSON.stringify(usageDataJsonData, null, 2)); } } exports.writeUsageDataJsonData = writeUsageDataJsonData; /** * Checks to see if the given group name exists in the specified json data * @param groupName Group name to search for in the specified json data * @returns Boolean of whether group name exists */ function groupNameExists(groupName) { if (fs.existsSync(defaults.usageDataJsonFilePath) && fs.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "" && fs.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "undefined") { const jsonData = readUsageDataJsonData(); return Object.getOwnPropertyNames(jsonData.usageDataInstances).includes(groupName); } return false; } exports.groupNameExists = groupNameExists; /** * Reads usage data settings from the usage data json config file for a specific group * @returns Settings for the specified group */ function readUsageDataSettings(groupName = defaults.groupName) { if (fs.existsSync(defaults.usageDataJsonFilePath)) { return readUsageDataJsonData().usageDataInstances[groupName]; } else { return undefined; } } exports.readUsageDataSettings = readUsageDataSettings; //# sourceMappingURL=usageDataSettings.js.map