quip-export
Version:
Export all folders and documents from Quip
91 lines (82 loc) • 2.35 kB
JavaScript
const fs = require('fs');
const mkdirp = require('mkdirp');
const path = require('path');
const semver = require('semver');
const npmLatest = require('npm-latest');
const packageJson = require('../../package.json');
/*
Synchronous read
*/
function readTextFile(filename) {
const nFilename = path.normalize(filename);
return fs.readFileSync(nFilename, 'utf-8');
}
/*
Synchronous write
*/
function writeTextFile(filename, text) {
const nFilename = path.normalize(filename);
mkdirp.sync(path.dirname(nFilename));
fs.writeFileSync(nFilename, text);
}
/*
write a blob
*/
function writeBlobFile(filename, blob) {
const nFilename = path.normalize(filename);
mkdirp.sync(path.dirname(nFilename));
return new Promise((resolve, reject) =>
blob.stream()
.on('error', error => {
if (blob.stream().truncated)
// delete the truncated file
fs.unlinkSync(nFilename);
reject(error);
})
.pipe(fs.createWriteStream(nFilename))
.on('error', error => reject(error))
.on('finish', () => resolve({ path }))
);
}
/*
get npm package version information
*/
async function getVersionInfo() {
const versionsInfo = {
localVersion: packageJson.version,
remoteVersion: packageJson.version,
localOutdate: false
};
try {
versionsInfo.remoteVersion = (await npmLatest.getLatest('quip-esxport')).version;
// compare to local version
versionsInfo.localOutdate = semver.gt(versionsInfo.remoteVersion, versionsInfo.localVersion);
} catch(e) {
// nothing to do
}
return versionsInfo;
}
//await tryCatch(() => quipService.getUser());
async function tryCatch(func, message) {
return new Promise((resolve) => {
func().then(res => resolve(res)).catch((e) => {
if(message) { console.error(message); }
console.error(e);
resolve();
});
});
}
function cliBox(message) {
let boxedMessage = `| ${message} |`;
console.log('-'.repeat(boxedMessage.length));
console.log(boxedMessage);
console.log('-'.repeat(boxedMessage.length));
}
module.exports = {
readTextFile,
writeTextFile,
writeBlobFile,
getVersionInfo,
cliBox,
tryCatch
};