"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.modifyAsync = modifyAsync;
exports.cleanBackupAsync = cleanBackupAsync;
exports.createBlankAsync = createBlankAsync;
function _fsExtra() {
const data = _interopRequireDefault(require("fs-extra"));
_fsExtra = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _plist() {
const data = _interopRequireDefault(require("plist"));
_plist = function () {
return data;
};
return data;
}
function _ExponentTools() {
const data = require("./ExponentTools");
_ExponentTools = function () {
return data;
};
return data;
}
function _Logger() {
const data = _interopRequireDefault(require("./Logger"));
_Logger = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getNormalizedPlistFilename(plistName) {
let plistFilename;
if (plistName.indexOf('.') !== -1) {
plistFilename = plistName;
} else {
plistFilename = `${plistName}.plist`;
}
return plistFilename;
}
/**
* @param plistName base filename of property list. if no extension, assumes .plist
*/
async function modifyAsync(plistPath, plistName, transform) {
let plistFilename = _getNormalizedPlistFilename(plistName);
let configPlistName = _path().default.join(plistPath, plistFilename);
let configFilename = _path().default.join(plistPath, `${plistName}.json`); // grab original plist as json object
let config;
if (process.platform === 'darwin') {
await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'json', configPlistName, '-o', configFilename]);
let configContents = await _fsExtra().default.readFile(configFilename, 'utf8');
try {
config = JSON.parse(configContents);
} catch (e) {
_Logger().default.info(`Error parsing ${configFilename}`, e);
_Logger().default.info('The erroneous file contents was:', configContents);
config = {};
}
} else {
config = _plist().default.parse(_fsExtra().default.readFileSync(configPlistName, 'utf8'));
} // apply transformation
config = transform(config); // back up old plist and swap in modified one
await (0, _ExponentTools().spawnAsyncThrowError)('/bin/cp', [configPlistName, `${configPlistName}.bak`]);
await _fsExtra().default.writeFile(configFilename, JSON.stringify(config));
if (process.platform === 'darwin') {
await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'xml1', configFilename, '-o', configPlistName]);
} else {
await _fsExtra().default.writeFile(configPlistName, _plist().default.build(config));
}
return config;
}
async function createBlankAsync(plistPath, plistName) {
// write empty json file
const emptyConfig = {};
const tmpConfigFile = _path().default.join(plistPath, `${plistName}.json`);
await _fsExtra().default.writeFile(tmpConfigFile, JSON.stringify(emptyConfig)); // convert to plist
let plistFilename = _getNormalizedPlistFilename(plistName);
let configPlistName = _path().default.join(plistPath, plistFilename);
if (process.platform === 'darwin') {
await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'xml1', tmpConfigFile, '-o', configPlistName]);
} else {
await _fsExtra().default.writeFile(configPlistName, JSON.stringify(_plist().default.build(emptyConfig)));
} // remove tmp json file
await (0, _ExponentTools().spawnAsyncThrowError)('/bin/rm', [tmpConfigFile]);
}
async function cleanBackupAsync(plistPath, plistName, restoreOriginal = true) {
let plistFilename = _getNormalizedPlistFilename(plistName);
let configPlistName = _path().default.join(plistPath, plistFilename);
let configFilename = _path().default.join(plistPath, `${plistName}.json`);
const backupPlistPath = `${configPlistName}.bak`;
if (restoreOriginal && (await _fsExtra().default.pathExists(backupPlistPath))) {
await _fsExtra().default.copy(backupPlistPath, configPlistName);
}
await _fsExtra().default.remove(backupPlistPath);
await _fsExtra().default.remove(configFilename);
}
//# sourceMappingURL=../__sourcemaps__/detach/IosPlist.js.map