office-addin-dev-settings
Version:
Configure developer settings for Office Add-ins.
279 lines • 9.56 kB
JavaScript
// 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
;