"use strict"; // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; 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_1 = __importDefault(require("fs")); const defaults = __importStar(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_1.default.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_1.default.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_1.default.existsSync(defaults.usageDataJsonFilePath)) { const jsonData = fs_1.default.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_1.default.existsSync(defaults.usageDataJsonFilePath) && fs_1.default.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "" && fs_1.default.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_1.default.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_1.default.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_1.default.existsSync(defaults.usageDataJsonFilePath) && fs_1.default.readFileSync(defaults.usageDataJsonFilePath, "utf8") !== "" && fs_1.default.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_1.default.existsSync(defaults.usageDataJsonFilePath)) { return readUsageDataJsonData().usageDataInstances[groupName]; } else { return undefined; } } exports.readUsageDataSettings = readUsageDataSettings; //# sourceMappingURL=usageDataSettings.js.map