@jaricardodev/ews-javascript-api
Version:
EWS Managed api in JavaScript
112 lines (99 loc) • 2.91 kB
JavaScript
const { cat, rm, cp, exec, mkdir } = require("shelljs")
const replace = require('replace-in-file');
const ora = require('ora');
const { readFile, writeFile } = require('jsonfile')
const os = require("os");
const typingSource = "build/output/node/js/**/*.d.ts";
const typingFile = "typings/ExchangeWebService.d.ts";
const typePrefixFile = "scripts/config/tsd.start";
const typeSuffixFile = "scripts/config/tsd.end";
const outputDir = "build/output/node";
const spinner = ora({ spinner: "arc", color: "yellow" });
(async () => {
try {
spinner.start("Cleaning up from previous session");
preClean();
spinner.succeed();
spinner.start("Compiling TypeScript");
await compile();
spinner.succeed();
spinner.start("Combining TypeScript definitions")
mergeDef();
cleanDef();
fixDef();
cleanupDef();
spinner.succeed();
spinner.start("Copying npm files")
copyFiles();
copyPackageJson();
spinner.succeed();
} catch (error) {
console.error(error);
spinner.fail();
} finally {
spinner.stop();
spinner.clear();
}
})();
function preClean() {
rm('-rf', outputDir);
try {
mkdir("-p", outputDir);
} catch (error) { }
}
function compile() {
return new Promise(resolve => {
exec("tsc -p tsconfig.build.json", { shell: true, stdio: 'inherit' }, resolve);
})
}
function mergeDef() {
cat(typingSource).to(typingFile);
}
function cleanDef() {
const options = {
files: typingFile,
from: [
/\r?\n?^.*import.*\{.*\}.*from.*\;/gm,
/\r?\nimport \* as moment from 'moment-timezone';/g,
/^.*export.*\{.*\}.*from.*\;/gm,
/^.*export.*\{.*\};$/gm,
/^.*\/\/\/\s*\<reference.*\>/gm,
/(\r?\n\s*\/\*\*\s*\r?\n([^\*]|(\*(?!\/)))*\*\/)?\r?\n\s*private\s.*;/gm, // replace line with private and also preceding lines with jsdoc comments
// /^\s*private\s.*;/gm, // original replacing private did not replace p
/\r\n\r\n/g,
/\n\n/g,
/export declare/g,
],
to: '',
};
replace.sync(options);
}
function fixDef() {
cat(typePrefixFile, typingFile, typeSuffixFile).to(typingFile)
}
function cleanupDef() {
rm(typingSource);
}
function copyFiles() {
cp([
"./README.md",
"./LICENSE",
"./COPYRIGHT",
], outputDir);
mkdir("build/output/node/typings");
cp("./typings/ExchangeWebService.d.ts", "build/output/node/typings/ExchangeWebService.d.ts");
}
function copyPackageJson() {
return new Promise(async resolve => {
const file = 'package.json'
try {
const obj = await readFile(file);
delete obj.devDependencies;
delete obj.scripts;
await writeFile(`${outputDir}/package.json`, obj, { spaces: 4, EOL: os.EOL });
resolve();
} catch (error) {
console.error(error);
}
});
}