UNPKG

manifest-validator

Version:

## How to install ```bash npm install manifest-validator@0.0.1-beta.1 ```

99 lines 3.77 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const commander = require("commander"); const fs = require("fs"); const request = require("request"); const chalk = require("chalk"); let options = { uri: 'https://verificationservice.osi.office.net/ova/addincheckingagent.svc/api/addincheck?lang=zh-CH', method: 'POST', headers: { 'Content-Type': 'application/xml' } }; commander .arguments('<manifest>') .option('-l, --language [optional]', 'localization language') .action((manifest) => { callOmexService(manifest, options, (formattedBody) => { let validationReport = formattedBody.checkReport.validationReport; let validationResult = validationReport.result; let validationErrors = []; let validationWarnings = []; let validationInfos = []; getNestedObj(validationReport, 'errors', validationErrors); getNestedObj(validationReport, 'warnings', validationWarnings); getNestedObj(validationReport, 'infos', validationInfos); console.log('----------------------'); if (validationResult === 'Passed') { // supported products only exist when manifest is valid let supportedProducts = formattedBody.checkReport.details.supportedProducts; console.log(`${chalk.bold('Validation: ')}${chalk.bold.green('Passed')}`); console.log(` ${chalk.bold.yellow('Warning(s): ')}`); logValidationReport(validationWarnings); console.log(` Additional Information:`); logValidationReport(validationInfos); console.log(`With this manifest, the store will test your add-in against the following platforms:`); logSupportedProduct(supportedProducts); } else { console.log(`${chalk.bold('Validation: ')}${chalk.bold.red('Failed')}`); console.log(` ${chalk.bold.red('Errors(s): ')}`); logValidationReport(validationErrors); console.log(` ${chalk.bold.yellow('Warning(s): ')}`); logValidationReport(validationWarnings); console.log(` Additional Information:`); logValidationReport(validationInfos); console.log(`** throws error and exits **`); } console.log('----------------------'); }); }) .parse(process.argv); function callOmexService(file, options, callback) { let formattedBody = {}; fs.createReadStream(file) .pipe(request(options, (err, res, body) => { formattedBody = JSON.parse(body.trim()); return callback(formattedBody); })); } function getNestedObj(obj, item, result) { for (let i = 0; i < obj[item].length; i++) { let itemTitle = obj[item][i].title; let itemDetail = obj[item][i].detail; let itemLink = obj[item][i].link; let itemCollection = { 'title': itemTitle, 'detail': itemDetail, 'link': itemLink }; result.push(JSON.stringify(itemCollection)); } return result; } function logValidationReport(obj) { if (obj.length > 0) { for (let i = 0; i < obj.length; i++) { let jsonObj = JSON.parse(obj[i]); console.log(' - ' + jsonObj.title + ': ' + jsonObj['detail'] + ' (link: ' + jsonObj['link'] + ')'); } } else { // TODO: get language console.log(' N/A'); } } function logSupportedProduct(obj) { if (obj.length > 0) { for (let i = 0; i < obj.length; i++) { console.log(obj[i].title + ', Version: ' + obj[i].version); } } else { // TODO; get language console.log('N/A'); } } //# sourceMappingURL=index.js.map