bundlewatch
Version:
Keep watch of your bundle size
101 lines (84 loc) • 2.91 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
var _logger = require('../../../logger');
var _logger2 = _interopRequireDefault(_logger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const getContextForFilePath = filePath => {
let context = 'bundlewatch';
if (filePath) {
const TRUNCATE_TO_LENGTH = 35;
if (filePath.length > TRUNCATE_TO_LENGTH) {
context += ' *' + filePath.substring(filePath.length - TRUNCATE_TO_LENGTH - 2, filePath.length);
} else {
context += ' ' + filePath;
}
}
return context;
};
class GitHubService {
constructor({ repoOwner, repoName, commitSha, githubAccessToken }) {
this.repoOwner = repoOwner;
this.repoName = repoName;
this.commitSha = commitSha;
this.githubAccessToken = githubAccessToken;
this.contexts = new Set();
}
get repo() {
return `${this.repoOwner}/${this.repoName}`;
}
get enabled() {
if (this.githubAccessToken && this.repoOwner && this.repoName && this.commitSha) {
return true;
}
return false;
}
update(message, url, status, filePath) {
if (!this.enabled) {
return Promise.resolve({});
}
const context = getContextForFilePath(filePath);
if (!this.contexts.has(context) && this.contexts.size >= 5) {
_logger2.default.warn(`Max reported statuses reached, github status will not be reported`);
return Promise.resolve();
}
this.contexts.add(context);
return (0, _axios2.default)({
method: 'POST',
url: `https://api.github.com/repos/${this.repo}/statuses/${this.commitSha}`,
responseType: 'json',
data: {
state: status,
target_url: url,
description: message,
context
},
timeout: 5000,
headers: {
Authorization: `token ${this.githubAccessToken}`
}
}).catch(error => {
if (error.response) {
_logger2.default.error(`GitHubService HTTP_${error.response.status} :: ${error.response.data ? error.response.data.message : ''}`);
return;
}
throw error;
});
}
start({ message }) {
return this.update(message, undefined, 'pending');
}
pass({ message, url }) {
return this.update(message, url, 'success');
}
fail({ message, url, filePath }) {
return this.update(message, url, 'failure', filePath);
}
error({ message }) {
return this.update(message, undefined, 'error');
}
}
exports.default = GitHubService;