UNPKG

office-addin-dev-settings

Version:

Configure developer settings for Office Add-ins.

279 lines 9.56 kB
"use strict"; // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. Object.defineProperty(exports, "__esModule", { value: true }); exports.isStringType = exports.isNumberType = exports.getValues = exports.getValue = exports.getStringValue = exports.getNumberValue = exports.doesValueExist = exports.doesKeyExist = exports.deleteValue = exports.deleteKey = exports.addStringValue = exports.addNumberValue = exports.addBooleanValue = exports.RegistryValue = exports.RegistryTypes = exports.RegistryKey = void 0; const tslib_1 = require("tslib"); const winreg_1 = tslib_1.__importDefault(require("winreg")); const office_addin_usage_data_1 = require("office-addin-usage-data"); class RegistryKey { get path() { return this.winreg.path; } constructor(path) { if (!path) { throw new office_addin_usage_data_1.ExpectedError("Please provide a registry key path."); } const index = path.indexOf("\\"); if (index <= 0) { throw new office_addin_usage_data_1.ExpectedError(`The registry key path is not valid: "${path}".`); } const hive = path.substring(0, index); const subpath = path.substring(index); this.winreg = new winreg_1.default({ hive: normalizeRegistryHive(hive), key: subpath, }); } } exports.RegistryKey = RegistryKey; class RegistryTypes { } exports.RegistryTypes = RegistryTypes; RegistryTypes.REG_BINARY = winreg_1.default.REG_BINARY; RegistryTypes.REG_DWORD = winreg_1.default.REG_DWORD; RegistryTypes.REG_EXPAND_SZ = winreg_1.default.REG_EXPAND_SZ; RegistryTypes.REG_MULTI_SZ = winreg_1.default.REG_MULTI_SZ; RegistryTypes.REG_NONE = winreg_1.default.REG_NONE; RegistryTypes.REG_QWORD = winreg_1.default.REG_QWORD; RegistryTypes.REG_SZ = winreg_1.default.REG_SZ; class RegistryValue { get isNumberType() { return isNumberType(this.type); } get isStringType() { return isStringType(this.type); } constructor(key, name, type, data) { this.key = key; this.name = name; this.type = type; this.data = data; } } exports.RegistryValue = RegistryValue; function addValue(key, value, type, data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const onError = (err) => { if (err) { reject(new Error(`Unable to set registry value "${value}" to "${data}" (${type}) for key "${key.path}".\n${err}`)); } else { resolve(); } }; try { key.winreg.set(value, type, data, onError); } catch (err) { onError(err); } }); }); } function addBooleanValue(key, value, data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return addValue(key, value, winreg_1.default.REG_DWORD, data ? "1" : "0"); }); } exports.addBooleanValue = addBooleanValue; function addNumberValue(key, value, data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return addValue(key, value, winreg_1.default.REG_DWORD, data.toString()); }); } exports.addNumberValue = addNumberValue; function addStringValue(key, value, data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return addValue(key, value, winreg_1.default.REG_SZ, data); }); } exports.addStringValue = addStringValue; function deleteKey(key) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const onError = (err) => { if (err) { reject(new Error(`Unable to delete registry key "${key.path}".\n${err}`)); } else { resolve(); } }; try { key.winreg.keyExists((keyExistsError, exists) => { if (exists) { key.winreg.destroy(onError); } else { onError(keyExistsError); } }); } catch (err) { onError(err); } }); }); } exports.deleteKey = deleteKey; function deleteValue(key, value) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const onError = (err) => { if (err) { reject(new Error(`Unable to delete registry value "${value}" in key "${key.path}".\n${err}`)); } else { resolve(); } }; try { key.winreg.valueExists(value, (_, exists) => { if (exists) { key.winreg.remove(value, onError); } else { resolve(); } }); } catch (err) { onError(err); } }); }); } exports.deleteValue = deleteValue; function doesKeyExist(key) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const onError = (err, exists = false) => { if (err) { reject(new Error(`Unable to determine if registry key exists: "${key.path}".\n${err}`)); } else { resolve(exists); } }; try { key.winreg.keyExists(onError); } catch (err) { onError(err); } }); }); } exports.doesKeyExist = doesKeyExist; function doesValueExist(key, value) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const onError = (err, exists = false) => { if (err) { reject(new Error(`Unable to determine if registry value "${value}" exists for key "${key.path}".\n${err}`)); } else { resolve(exists); } }; try { key.winreg.valueExists(value, onError); } catch (err) { onError(err); } }); }); } exports.doesValueExist = doesValueExist; function getNumberValue(key, value) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const registryValue = yield getValue(key, value); return registryValue && registryValue.isNumberType ? parseInt(registryValue.data, undefined) : undefined; }); } exports.getNumberValue = getNumberValue; function getStringValue(key, value) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const registryValue = yield getValue(key, value); return registryValue && registryValue.isStringType ? registryValue.data : undefined; }); } exports.getStringValue = getStringValue; function getValue(key, value) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve) => { const onError = (err, item) => { if (err) { resolve(undefined); } else { resolve(item ? new RegistryValue(key.path, item.name, item.type, item.value) : undefined); } }; try { key.winreg.get(value, onError); } catch (err) { onError(err); } }); }); } exports.getValue = getValue; function getValues(key) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const callback = (err, items) => { if (err) { reject(err); } else { resolve(items.map((item) => new RegistryValue(key.path, item.name, item.type, item.value))); } }; try { key.winreg.values(callback); } catch (err) { reject(err); } }); }); } exports.getValues = getValues; function isNumberType(registryType) { // NOTE: REG_QWORD is not included as a number type since it cannot be returned as a "number". return registryType === RegistryTypes.REG_DWORD; } exports.isNumberType = isNumberType; function isStringType(registryType) { switch (registryType) { case RegistryTypes.REG_SZ: return true; default: return false; } } exports.isStringType = isStringType; function normalizeRegistryHive(hive) { switch (hive) { case "HKEY_CURRENT_USER": return winreg_1.default.HKCU; case "HKEY_LOCAL_MACHINE": return winreg_1.default.HKLM; case "HKEY_CLASSES_ROOT": return winreg_1.default.HKCR; case "HKEY_CURRENT_CONFIG": return winreg_1.default.HKCC; case "HKEY_USERS": return winreg_1.default.HKU; default: return hive; } } //# sourceMappingURL=registry.js.map